检测噪声图像中的100px区域差异

时间:2015-03-21 17:25:46

标签: matlab image-processing compare imagemagick

假设您有一张

的照片

enter image description here

如果区域/对比度/色差超过100像素(平方米),则需要提醒。 因此该算法对此图片说,但对下图进行说明 enter image description here

可能的工具是

  • ImageMagick的比较但我认为这不是最好的方法
  • Matlab - 这里有内置函数,但我不知道哪个

来自Matlab R2014b中Shai代码的输出

enter image description here

enter image description here

此后的某些阶段

  • 找到进程分离的正确阈值
  • 分离Shai所描述的过程
  • 做决策 - 只要找到一个100px的区域,就可以计算正方形中的白色区域数量

如何在两个文件中选择100px的区域差异?

2 个答案:

答案 0 :(得分:3)

使用积极的平均滤波器来消除噪音和阈值:

%// read image and convert to single channel gray-scale:
img1 = imread('http://i.stack.imgur.com/ZDoUe.png');
img1 = rgb2gray(img1);
img2 = imread('http://i.stack.imgur.com/TOs0w.png');
img2 = rgb2gray(img2);

%// use aggressive average filter
f1 = imfilter( img1, ones(11)/121, 'symmetric');
f2 = imfilter( img2, ones(11)/121, 'symmetric');

粗略删除噪音后,您可以对过滤后的图像进行阈值处理

bw1 = f1 > 128;
bw2 = f2 > 128;

生成的阈值图像是: enter image description here
我相信你可以从这里拿走它......

答案 1 :(得分:1)

我仍然不明白你的问题,或@ Shai的回答是什么问题。据我所知,问题与ImageMagick一样容易解决,与Shai建议的完全相同,所以我也不明白为什么你认为ImageMagick是错误的方法。也许你可以澄清你实际寻求的是什么,所以我们都可以尝试进一步帮助你。

无论如何,就目前而言,我会采用与ImageMagick相同的方式

convert input.png -blur x5 -threshold 50%  output.png

enter image description here

如果要计算白色像素,我会克隆图像并将克隆中的所有像素设置为黑色,然后让ImageMagick以绝对值告诉我克隆与原始像素之间有多少像素不同,如这样:

convert output.png \( +clone -evaluate set 0 \) -metric AE -compare -format "%[distortion]" info:

<强>输出

89008

如果你想计算黑色像素,你可以先反转(否定)图像,就像这样

convert output.png -negate \( +clone -evaluate set 0 \) -metric AE -compare -format "%[distortion]" info:
93414