perl – 在数码照片中,我如何检测一个山是否被云遮蔽?

前端之家收集整理的这篇文章主要介绍了perl – 在数码照片中,我如何检测一个山是否被云遮蔽?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
问题

我有一个在日本a mountain的数码照片的集合。然而,山常常被云或雾遮蔽。

我可以使用什么技术来检测山在图像中可见?我目前使用Perl与Imager模块,但开放替代品。

所有图像都来自完全相同的位置 – 这些是一些样品。

我天真的解决方

我开始采取山锥的几个水平像素样本,并将亮度值与来自天空的其他样本进行比较。这对于区分良好图像1和不良图像2很有效。

然而在秋天,它下雪,山变得比天空更亮,像图像3,我的简单亮度测试开始失败。

图像4是边缘情况的示例。我会把这个分类为一个好的形象,因为一些山是清晰可见的。

更新1

谢谢你的建议 – 我很高兴你大大高估了我的能力。

基于答案,我开始尝试@L_404_2@变换,这给我一个更简单的图像来分析。

convert sample.jpg -edge 1 edge.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();

我运行这个为各种样品图像,我得到的结果如下(卷积图像显示在每个样品下面):

(抱歉 – 上次不同的示例图片!)

现在我想量化一个图像是如何’ridgy’。我试图取图像平均亮度:

$kernel_image->Scale('1x1');
die $kernel_image->GetPixel(x=>1,y=>1)[0];

但这给出不给出有意义的值(0.0165,0.0175和0.0174)。任何更好的方法

解决方法

我认为你工作的水平太低。快速通过边缘检测滤波器将图像集非常清楚地分割成(1,3)和(2,4)。特别是如果这些图像来自固定的相机视点,在(1)中找到与原型形状的匹配将在算法上相对容易。即使你的情况(4)可以给你一个部分匹配的域,你可以启发式地确定是否有足够的山有考虑。

猜你在找的Perl相关文章