【发布时间】:2018-06-28 13:02:42
【问题描述】:
我正在尝试对这样的图像应用基本图像处理: 我的 for 循环完全符合我的要求:它允许我找到强度最高的像素,并记住坐标那个像素。但是,只要遇到rows 的倍数(在本例中等于 18),代码就会中断。
例如,这个图像的长度(image 的rows * columns)是 414。所以有 414/18 = 23 种程序失败的情况(即列数)。
也许有更好的方法来实现我的目标,但这是我能想到的唯一方法,即按像素强度对图像进行排序,同时还知道每个像素的坐标。很高兴接受替代代码的建议,但如果有人知道如何处理mod(x,18) = 0 的情况(即当向量的索引可被总行数整除时),那就太好了。
image = imread('test.tif'); % feed program an image
image_vector = image(:); % vectorize image
[sortMax,sortIndex] = sort(image_vector, 'descend'); % sort vector so
%that highest intensity pixels are at top
max_sort = [];
[rows,cols] = size(image);
for i=1:length(image_vector)
x = mod(sortIndex(i,1),rows); % retrieve original coordinates
% of pixels from matrix "image"
y = floor(sortIndex(i,1)/rows) +1;
if image(x,y) > 0.5 * max % filter out background noise
max_sort(i,:) = [x,y];
else
continue
end
end
【问题讨论】: