总是习惯c++编程了,惯用对图像三维数据访问顺序为: 列,行,层。表示符号分别是x,y,z 或者i, j,k
三重循环,对于现在的医学三维图像,也多是这样
for(int z = 0; z < nslice; z++)
for(int y = 0; y < nHeight,y++)
for(int x = 0; x < nWidth, x++)
{
//Volume(z*nHeight*nWidht+y*nWidht+x)
........
}
当然,对于一般的bmp ,由CCD采集图像,二维的,768*576 (行*列),为了循环大在内层,先行在列循环也是有的。
for(int w = 0; w< nWidth; w++)
for(int h= 0; h < nHeiht, h++)
{...
pImage(h*nwidht+w)
}
不管怎么样,c++都是以先行存储。
但是matlab,就偏偏反着了。。。。
[h,w]= size(Image), 第一个参数是行,第二个参数是列。好多都是这样(行, 列)的方式。切记不能给搞反了。
I= zeros(h,w), 也是生产h行,w列的。。。。
图像矩阵读取 I(i,j),也是第i行,j列的数。
>> I = rand(2,4)
I =
0.8147 0.1270 0.6324 0.2785
0.9058 0.9134 0.0975 0.5469
>> [h,w]= size(I)
h =
2
w =
4
总之,matlab存储是以先列存储的。