私はバイナリイメージを持っています。ピクセル値 = 1 を見つけて、現在のピクセルとしてラベル付けしたいと考えています。次に、その 8 つの隣接ピクセル値を合計します。現在のピクセルの 8 近傍ピクセル値の合計 = 1 の場合、その現在のピクセルをマーカーでマークします。次のようなバイナリ イメージの一部:
0 0 0 0
0 1 0 0
0 0 1 1 0
0 0 0 1
0 0 0 0 0
次のmatlabコードを試しましたが、いくつかのエラーがあります(この行で -> Sums = sum(currentPix, nOffsets);)
.どうすれば修正できますか?
Sums = 0;
S = size(BW,1);
nOffsets = [S, S+1, 1, -S+1, -S, -S-1, -1, S-1]'; %8-neighbors offsets
BW_Out = BW;
for row=1:S
for col=1:S
if BW(row,col),
break;
end
end
idx = sub2ind(size(BW),row,col);
neighbors = bsxfun(@plus, idx, nOffsets);
currentPix = find(BW==1); %if found 1, define it as current pixel
while ~isempty(currentPix)
% new current pixel list is set of neighbors of current list.
currentPix = bsxfun(@plus, currentPix, nOffsets);
currentPix = currentPix(:);
Sums = sum(currentPix, nOffsets); %error at this line
if (Sums==1) %if the sum of 8-neighbor values = 1, mark ROI
plot(currentPix,'r*','LineWidth',1);
end
% Remove from the current pixel list pixels that are already
currentPix(BW_Out(currentPix)) = [];
% Remove duplicates from the list.
currentPix = unique(currentPix);
end
end