繁体   English   中英

如何替换符合距离标准的像素?

[英]How do I replace pixels that meet a distance criteria?

我有图像:

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像素,我想用NaN替换'A'两个位置,否则,我将它们保留不变。

我的预期输出将是:

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

请对此有任何帮助,我们将不胜感激。 非常感谢!

如果我正确理解了您的问题, NaN将相邻的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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM