<div dir="ltr">Hi David,<br><br>Now I realized the problem/limitation of multi-dimensional C array!<br><br>Since I could not find out any example in Google on how to create C arrays with strides, I ended up in using boost multi_array.<br>
It's quite good, but the problem is when the array dimensions increase to about 500x500x500, I get a strange run time error. I googled about this and found that the errors occurs when the system can't allocate CONTIGUOUS MEMORY.<br>
<br>Now I realize the reason behind your suggestion to use arrays with strides. I am resampling the vtkImageData to 1mm spacing from 2.5mm in all 3 dimensions. So there could be a factor of 8 increase in memory requirement. I tried to set the scalar data type to float even. <br>
<br>I desperately need to use 1mm dimensions for my research.<br><br>I have only 2GB RAM on win XP. I will try on the other computer with higher RAM.<br><br>Do you have any example or references for creating arrays with strides.<br>
<br>You were correct,C array are useless for image processing!<br><br>Thank you<br><br>Jothy<br><br><div class="gmail_quote">On Fri, Aug 19, 2011 at 5:29 PM, David Gobbi <span dir="ltr"><<a href="mailto:david.gobbi@gmail.com">david.gobbi@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Hi Jothy,<br>
<br>
I'm not telling you to not use a C array. What I'm telling you is<br>
that you should use a 1D C array with strides for each dimension.<br>
Do not use a 3D C array. Read up on strides and learn how to use<br>
them. You'll thank me later.<br>
<font color="#888888"><br>
- David<br>
</font><div><div></div><div class="h5"><br>
<br>
On Fri, Aug 19, 2011 at 10:23 AM, Jothy <<a href="mailto:jothybasu@gmail.com">jothybasu@gmail.com</a>> wrote:<br>
> Thanks for your reply.<br>
><br>
> I don't need to do any image processing with that C array. I need to get the<br>
> scalar values at [x,y,z] for a huge list of points from the vtkImageData<br>
> (they are randomly located). First I tried with<br>
> GetScalarComponentAsDouble(x,y,z,0).<br>
><br>
> But it's too slow (for my purpose, 20-30 secs). After some Google search, I<br>
> came to know that acessing array with [] will be much faster that<br>
> GetscalarComponent.<br>
><br>
> I even looked at vtkImageIterator, it only has methods span, begin,end. Most<br>
> importantly I need to copy those scalar values for later uses, so mere<br>
> scalar pointers won't help. That's why I am trying to do it with a c array.<br>
><br>
> Jothy<br>
><br>
> On Fri, Aug 19, 2011 at 5:15 PM, David Gobbi <<a href="mailto:david.gobbi@gmail.com">david.gobbi@gmail.com</a>> wrote:<br>
>><br>
>> Hi Jothy,<br>
>><br>
>> You probably don't want to create a 3D C array. In C, all dimensions<br>
>> of a C array except for the first dimension must be constant. So if<br>
>> you have variables N and M and you try doing this:<br>
>><br>
>> short myarray[N][M];<br>
>><br>
>> then you will get a compile error. Multidimensional C arrays are<br>
>> pretty much useless for image processing, people generally use a<br>
>> 1D array and strides/increments. Do a search for "array strides" on<br>
>> google.<br>
>><br>
>> - David<br>
>><br>
>> On Fri, Aug 19, 2011 at 9:54 AM, Jothy <<a href="mailto:jothybasu@gmail.com">jothybasu@gmail.com</a>> wrote:<br>
>> > Hi all,<br>
>> ><br>
>> > I am trying to create a 3D C array form vtkImageData. I tried<br>
>> > vtkImageExport, but I seems like only exporting it as a 1D array. Is<br>
>> > there<br>
>> > any other filter or how to convert it to a 3D array? I am new to c++ and<br>
>> > I<br>
>> > don't find any matrix manipulation function as in MATLAb or Python in c<br>
>> > std<br>
>> > lib.<br>
>> ><br>
>> > Thank you<br>
>> ><br>
>> > Jothy<br>
</div></div></blockquote></div><br></div>