我有图片:
A = [3 1 1 2 2
0 0 0 3 2
0 0 3 3 2
1 1 1 1 2
1 1 1 2 2];
从图像中我获得了以下矩阵:
B = [1,1; 3,3; 2,4; 3,4];
现在,我想测试'B'
中每个像素之间的距离,以查看与下一行中的直接像素相比哪些大于1。对于距离为<= 1
的像素,我希望将‘A’
中的两个位置替换为NaN
,否则,我会将它们保留原样。
我的预期输出是:
A = [3 1 1 2 2
0 0 0 NaN 2
0 0 NaN NaN 2
1 1 1 1 2
1 1 1 2 2];
我尝试过以下代码,但我不太明白我到底做错了什么。
[row, col] = find(A==3);
B = [row col]
for k = size(B, 1)-1
if sqrt( (row(k,:) - (row(k+1,:)))^.2 + (col(k,:) - (col(k+1,:)))^.2 ) <= 1
A(B(k, :)) = NaN
end
end
请非常感谢任何帮助。非常感谢!
答案 0 :(得分:0)
如果我正确理解了您的问题,您希望将相邻的3
单元格更改为NaN
。最简单的方法是检查所有3
个单元格并检查其中一个邻居是否为3
,如下面的代码所示:
for k = 1:length(row)
if safeCheck(A, row(k)+1, col(k)) || safeCheck(A, row(k), col(k)+1) || ...
safeCheck(A, row(k)-1, col(k)) || safeCheck(A, row(k), col(k)-1)
A(row(k), col(k)) = NaN;
end
end
function b = safeCheck(A, row, col)
if (1 <= row && row <= size(A, 1) && 1 <= col && col <= size(A, 2))
b = A(row, col) == 3 || isnan(A(row, col));
else
b = false;
end
end