噪声图片100px区域差异检测
Detection of 100px area differences in noise pictures
假设你有一张照片是
如果 area/contrast/color 差异超过 100 像素(以平方米为单位),您需要提醒的位置。
所以算法对这张图片说 yes 但对下面的图片说 no
可能的工具是
- ImageMagick 的 比较 但我认为这不是最好的方法
- Matlab - 这里有内置函数,但我不知道是哪个
Shai 在 Matlab R2014b 中的代码输出
在此之后的一些阶段
- 找到进程分离的正确阈值
- 像 Shai 描述的那样分离进程
- 做决策 - 只要找到一个 100px 的区域,就计算正方形中白色区域的数量
如何在两个文件中选择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
假设你有一张照片是
如果 area/contrast/color 差异超过 100 像素(以平方米为单位),您需要提醒的位置。
所以算法对这张图片说 yes 但对下面的图片说 no
可能的工具是
- ImageMagick 的 比较 但我认为这不是最好的方法
- Matlab - 这里有内置函数,但我不知道是哪个
Shai 在 Matlab R2014b 中的代码输出
在此之后的一些阶段
- 找到进程分离的正确阈值
- 像 Shai 描述的那样分离进程
- 做决策 - 只要找到一个 100px 的区域,就计算正方形中白色区域的数量
如何在两个文件中选择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