我正在尝试对以下图像进行裸露的图像处理:我的for循环正是我想要的:它使我能够找到强度最高的像素,并且还记得该像素的坐标。但是,只要遇到rows
的倍数(在这种情况下等于18),代码就会中断。
例如,该图像的长度(rows * columns
的{{1}})为414。因此,在414/18 = 23种情况下程序失败(即,列数)。
也许有一种更好的方法可以实现我的目标,但这是我可以想到的一种按像素强度对图像进行排序同时又知道每个像素坐标的唯一方法。很高兴提出替代代码的建议,但是如果有人对如何处理image
的情况(即,向量的索引可被总行数整除)感到非常高兴。
mod(x,18) = 0
答案 0 :(得分:2)
您知道MATLAB索引从1开始,因为您在计算+1
时执行y
。但是您忘了先从索引中减去1。这是正确的计算:
index = sortIndex(i,1) - 1;
x = mod(index,rows) + 1;
y = floor(index/rows) + 1;
此计算由功能ind2sub
执行,我建议您使用该功能。
编辑:实际上,ind2sub
等效于:
x = rem(sortIndex(i,1) - 1, rows) + 1;
y = (sortIndex(i,1) - x) / rows + 1;
(您可以通过键入edit ind2sub
看到这一点。对于正输入,rem
和mod
是相同的,因此x
的计算方法相同。但是对于计算{{1 }}他们避免使用y
,我想它会稍微更有效。
请注意
floor
与
相同image(x,y)
也就是说,您可以直接使用线性索引来索引二维数组。