我在日本的a mountain数码照片的集合。然而,这座山常常被云雾遮蔽。
我可以使用哪些技术来检测该山是图像中可见?我目前使用Perl的Imager模块,但可以选择。
所有的图像是从完全相同的位置拍摄 - 这些都是一些样品。
Sample Images http://www.freeimagehosting.net/uploads/7304a6e191.jpg
我天真的
我首先花了山锥的几个水平像素样本和亮度值从天空比较其它样品。这很适合于在秋季下雪2.
但是区分良好形象1和坏的形象和山成为比天空更加明亮,像图像3,我的简单的亮度测试启动失败。
图4是一个边缘案例的例子。我将这个分类为一个很好的图像,因为有些山峰清晰可见。
更新1
感谢您的建议 - 我很高兴你们都大大高估了我的能力。
基础上的答案,我已经开始尝试ImageMagick edge-detect变换,这给了我一个更简单的图像进行分析。
convert sample.jpg -edge 1 edge.jpg
Edge detected samples http://www.freeimagehosting.net/uploads/caa9018d84.jpg
我想我应该用某种遮蔽摆脱树木和大部分云的。
一旦我有蒙面的形象,什么是对的相似性比作“好”形象的最佳方式是什么?我猜“compare”命令适合这项工作?我如何从中获得数值“相似性”值?
更新2
我想可能是某处卷积越来越。
我通过执行边缘了我的“内核”的形象(下图的顶部)检测了良好的形象。然后,我清除了山脉轮廓周围的所有“噪音”,然后将其剪掉。
我然后用下面的代码:
use Image::Magick;
# Edge detect the test image
my $test_image = Image::Magick->new;
$test_image->Read($ARGV[0]);
$test_image->Quantize(colorspace=>'gray');
$test_image->Edge(radius => 1);
# Load the kernel
my $kernel_image = Image::Magick->new;
$kernel_image->Read('kernel-crop.jpg');
# Convolve and show the result
$kernel_image->Convolve(coefficients => [$test_image->GetPixels()]);
$kernel_image->Display();
我跑此关于各种样品的图像,和我的结果如下(卷积图像示每个样品如下):
(对不起 - 来自上次的不同样本图像!)
alt text http://www.freeimagehosting.net/uploads/f9a5a34980.jpg
现在我想以量化的图像如何 '隆起的' 的。我试图拍摄图像的平均亮度:
$kernel_image->Scale('1x1');
die $kernel_image->GetPixel(x=>1,y=>1)[0];
但是这给不给有意义的值(0.0165,0.0175和0.0174)。有更好的方法吗?
+1很好提出问题 – msw 2010-03-27 13:52:47
你低估了自己的能力。更新1中与“比较”的链接有许多非常好的方法可以通过卷积来生成一定程度的相似性度量,正如马塞洛所建议的那样。我希望你在打字时摆弄那些东西。 – msw 2010-03-27 14:04:47