画像内の領域を検出するアルゴリズムを実装しようとしています。つまり、シード ピクセルから始めて、隣接するピクセルを領域に追加し、最も高い値を最初に追加する必要があります。
隣接するピクセルを追加できるキューとして機能するデータ構造を探しています。できるはずです
- マトリックス (イメージ) にインデックスを付けて、最高値のピクセルを見つけます。
- ポイントを効率的に削除する
- まだ存在しない場合は、要素を追加します
これが私が思いついたものです
% 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
list
しかし、要素の追加と削除により適したデータ構造に置き換えたいと思います。何か案は?