假设我有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
检测最大的补丁。答案 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
对于不同的白色阈值(这里我需要230)和不同的迭代,你可以尝试看到变化。虽然这只是我的图像中的一个观察,我觉得你的矩阵是黑色的簇与一些随机的白色......
回答我会更容易,我们知道图像是什么样的,可能会在你的问题中添加,并评论答案的有用性。
答案 1 :(得分:0)
这可能是一种天真的方法但是考虑将二元矩阵与其翻转版本相乘:
d = ( A .* flipud(fliplr(A)) ) / numel(A);
如果1
和0
是随机分发的,那么您有1x1
或1x0
的机会很多。如果数据更集群,则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,那么1
和0
可能是randomely分布的。
你的问题让我想到评估你的二进制数据的熵,这里是关于stackexchange的类似问题,我可以提供更多的想法: