如何量化MATLAB中信号的空间分布

时间:2018-02-14 14:55:48

标签: matlab image-processing matrix signal-processing spatial

假设我有2个矩阵,它们代表2D空间中1和0的信令。

A = [1,1,0,0;1,1,0,0;1,1,0,0];
A =

 1     1     0     0
 1     1     0     0
 1     1     0     0

B = [1,0,1,1;1,0,0,1;1,0,0,0];
B =
 1     0     1     1
 1     0     0     1
 1     0     0     0

矩阵A似乎聚集信号,而矩阵B更随机分布。我的目标是在图像中使用这种方法识别噪声,这种方法的结构应该比实际信号要小得多。

是否有regionprops功能可以做到这一点?还有其他建议吗?

到目前为止我的方法:

  • 测量正片之间的距离(得到平均值)
  • 使用bwareafilt检测最大的补丁。

2 个答案:

答案 0 :(得分:0)

我使用的是黑白图像,其中黑色是文字,黑色是噪音。 我只是强制执行代码中的像素检查。 想法是:

  

如果任何非白色像素被5个或更多白色(thr值> 230)像素包围,请将其视为噪声并使其变白。

for k=1:num_you_like 
c=0; img_inp=img_final;

for i=2:(length(img_inp(:,1))-1)
    for j=2:(length(img_inp(1,:))-1)
if(img_final(i,j)<255)
    if (img_inp(i-1,j)>230)
        c=c+1;
    end
    if (img_inp(i+1,j)>230)
        c=c+1;
    end
    if (img_inp(i,j-1)>230)
        c=c+1;
    end
    if (img_inp(i,j+1)>230)
        c=c+1;
    end
    if (img_inp(i-1,j-1)>230)
        c=c+1;
    end
    if (img_inp(i-1,j+1)>230)
        c=c+1;
    end
    if (img_inp(i+1,j-1)>230)
        c=c+1;
    end
    if (img_inp(i+1,j+1)>230)
        c=c+1;
    end
    if c>5
      img_final(i,j)=255;
    end
    c=0;
end
end
end

original for num_you_like=1

对于不同的白色阈值(这里我需要230)和不同的迭代,你可以尝试看到变化。虽然这只是我的图像中的一个观察,我觉得你的矩阵是黑色的簇与一些随机的白色......

  

回答我会更容易,我们知道图像是什么样的,可能会在你的问题中添加,并评论答案的有用性。

答案 1 :(得分:0)

这可能是一种天真的方法但是考虑将二元矩阵与其翻转版本相乘:

d = ( A .* flipud(fliplr(A)) ) / numel(A);

如果10是随机分发的,那么您有1x11x0的机会很多。如果数据更集群,则1x0更有可能更为普遍。因此,随机分布的数据将d接近0.5

翻转可能不适用于所有情况,例如:

0 0 0 0 0 0 0
0 0 1 1 1 0 0
0 0 1 1 1 0 0
0 0 1 1 1 0 0
0 0 0 0 0 0 0

但是你可以针对不同的滞后做circshift ...如果所有滞后平均接近0.5,那么10可能是randomely分布的。

你的问题让我想到评估你的二进制数据的熵,这里是关于stackexchange的类似问题,我可以提供更多的想法:

https://stats.stackexchange.com/questions/17109/measuring-entropy-information-patterns-of-a-2d-binary-matrix