噪声图片100px区域差异检测

Detection of 100px area differences in noise pictures

假设你有一张照片是

如果 area/contrast/color 差异超过 100 像素(以平方米为单位),您需要提醒的位置。 所以算法对这张图片说 yes 但对下面的图片说 no

可能的工具是

Shai 在 Matlab R2014b 中的代码输出

在此之后的一些阶段

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

使用激进的平均滤波器去除噪声和阈值:

%// 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;

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

我还是不明白你的问题,或者@Shai 的回答有什么问题。据我所知,这个问题很容易用 ImageMagick 以与 Shai 所建议的完全相同的方式解决,所以我也不明白为什么您认为 ImageMagick 是错误的方法。或许你可以弄清楚你真正寻求的是什么,这样我们都可以尝试进一步帮助你。

无论如何,现在,我会以同样的方式使用 ImageMagick

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

如果你想计算白色像素,我会克隆图像并将克隆中的所有像素设置为黑色,然后让 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