Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 如何替换满足距离标准的像素?_Arrays_Matlab_Image Processing - Fatal编程技术网

Arrays 如何替换满足距离标准的像素?

Arrays 如何替换满足距离标准的像素?,arrays,matlab,image-processing,Arrays,Matlab,Image Processing,我有这样的形象: 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。对于距离的像素,如果我正确理解了您的问题,您希望将相邻的3单元格更改为NaN。最简单的方法是检查所有3单元格,并检查其相邻单元格之一是否为3,如下代码所示:

我有这样的形象:

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。对于距离
的像素,如果我正确理解了您的问题,您希望将相邻的
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
k=1时的
:长度(行)
如果安全检查(A,行(k)+1,列(k))| |安全检查(A,行(k),列(k)+1)| |。。。
安全检查(A,第(k)行第1列第(k)列)| |安全检查(A,第(k)行第(k)列第1列)
A(行(k),列(k))=NaN;
结束
结束
功能b=安全检查(A、行、列)

如果(1 try
A(B(k,1),B(k,2))=NaN;
insteadElementwise幂运算符是
^
(不是
^.
)for循环现在没有意义了,您可能想要的是:
for k=1:size(B,1)-1
谢谢@m7913d。代码有效。但是,我正在努力使其适应我的具体问题。这决不是你的错,因为我一直在寻找一种很好的方法来用非常简短的术语描述问题。尽管如此,我已经想出了一种更好的方法,并发布了一个新的问题。请不要搞错,我也学到了fr哦,你的密码。非常非常感谢。
[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
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