我試圖實現一個算法檢測圖像中的區域,即從一個種子像素開始,相鄰像素應該被添加到該區域,最高值首先。使用一組可變的點索引到矩陣
我正在尋找一個數據結構來充當可以添加相鄰像素的隊列。它應該能夠
- 索引的矩陣(圖像),以找到最高值像素
- 除去點有效地
- 添加的元素,如果不是已經存在
以下是我想出了
% 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