![](/img/trans.png)
[英]Using only an Excel formula, how do I count the number of rows that meet multiple criteria (including a countif)?
[英]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.