我有一个在日本a mountain的数码照片的集合。然而,山常常被云或雾遮蔽。@H_403_3@
我可以使用什么技术来检测山在图像中可见?我目前使用Perl与Imager模块,但开放替代品。@H_403_3@
所有图像都来自完全相同的位置 – 这些是一些样品。@H_403_3@
我开始采取山锥的几个水平像素样本,并将亮度值与来自天空的其他样本进行比较。这对于区分良好图像1和不良图像2很有效。@H_403_3@
然而在秋天,它下雪,山变得比天空更亮,像图像3,我的简单亮度测试开始失败。@H_403_3@
图像4是边缘情况的示例。我会把这个分类为一个好的形象,因为一些山是清晰可见的。@H_403_3@
更新1@H_403_3@
谢谢你的建议 – 我很高兴你大大高估了我的能力。@H_403_3@
基于答案,我开始尝试ImageMagick edge-detect变换,这给我一个更简单的图像来分析。@H_403_3@
convert sample.jpg -edge 1 edge.jpg
我假设我应该使用某种掩蔽,以摆脱树木和大部分的云。@H_403_3@
一旦我有掩蔽的图像,什么是最好的方式来比较相似性与“好的”图像?我猜“compare”命令适合这项工作吗?如何从这里获得数字“相似”值?@H_403_3@
更新2@H_403_3@
我想我可能在某个地方卷曲。@H_403_3@
我通过对一个好的图像执行边缘检测,我做了我的’内核’图像(下面的图像的顶部)。然后我把所有的“噪音”围绕山的轮廓,然后裁剪它。@H_403_3@
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();
我运行这个为各种样品图像,我得到的结果如下(卷积图像显示在每个样品下面):@H_403_3@
现在我想量化一个图像是如何’ridgy’。我试图取图像平均亮度:@H_403_3@
$kernel_image->Scale('1x1'); die $kernel_image->GetPixel(x=>1,y=>1)[0];