我试图实现一个算法检测图像中的区域,即从一个种子像素开始,相邻像素应该被添加到该区域,最高值首先。使用一组可变的点索引到矩阵
我正在寻找一个数据结构来充当可以添加相邻像素的队列。它应该能够
- 索引的矩阵(图像),以找到最高值像素
- 除去点有效地
- 添加的元素,如果不是已经存在
以下是我想出了
% given:
% I image (2d matrix)
% x, y seed point
list = [];
region = zeros(size(I));
while [...]
% Add all neighbors of (x, y) to list
if x > 1
% neighboring pixel to the left
ind = sub2ind(size(I), x - 1, y);
if length(find(list == ind)) == 0
list(end+1) = ind;
end
end
% similarly for all other neighbors
% [...]
% Find max in I among points in list
[dummy, list_max_i] = max(I(list));
max_i = list(list_max_i);
[x, y] = ind2sub(size(I), max_i);
% remove from list
list(list_max_i) = [];
region(x, y) = 1;
end
但我想通过数据STR更换list
ucture,它更适合添加和删除元素。有任何想法吗?
使用'cell'数组。 – Justin 2013-04-11 19:59:25
有几件事我不明白你的算法。 'region'的作用是什么(你似乎把它设置为1,如果它有最大值,但从不参考它,你会不会陷入循环?)。从列表中删除“list_max_i”有什么意义?你的'while'循环何时终止?你想结束什么样的价值观?您是否试图从最大像素值开始创建“最陡峭的上升”,从您用作种子点的那个开始,并维护路径信息?多一点的信息,你可能会得到一个比迄今为止建议的更好的解决方案... – Floris 2013-04-29 04:57:50
这段代码实际上是在一个函数内,'region'是结果,一个图像中的连续区域。该列表只应包含用于添加到该区域的“候选人”,并且由于您不想一次又一次添加相同的候选人,因此添加到该区域时,必须从列表中删除元素。 – ValarDohaeris 2013-04-29 08:33:00