На цифровой фотографии, как я могу обнаружить, если гора затенена облаками?

Проблема

У меня есть набор цифровых фотографий горы в Японии. Однако гора часто затеняется облаками или вуалью.

Какие методы я могу использовать, чтобы обнаружить, что гора видима в изображении? Я в настоящее время использую Perl с модулем Формирователя изображения, но открытый для альтернатив.

Все изображения взяты от того же самого положения - это некоторые образцы.

Образец отображает http://www.freeimagehosting.net/uploads/7304a6e191.jpg

Мое наивное решение

Я запустил путем взятия нескольких горизонтальных пиксельных образцов горного конуса и сравнения значений яркости с другими образцами с неба. Это работало хорошо на дифференциацию хорошего изображения 1 и плохого изображения 2.

Однако осенью пошел снег, и гора стала более яркой, чем небо, как изображение 3, и мой простой тест яркости начал перестать работать.

Изображение 4 является примером пограничного случая. Я классифицировал бы это как хорошее изображение, так как часть горы явно видима.

ОБНОВЛЕНИЕ 1

Спасибо за предложения - я рад, что Вы все значительно переоценили мою компетентность.

На основе ответов я начал пробовать край ImageMagick - обнаруживают, преобразовывают, который дает мне намного более простое изображение для анализа.

convert sample.jpg -edge 1 edge.jpg

Край обнаружил образцы http://www.freeimagehosting.net/uploads/caa9018d84.jpg

Я предполагаю, что должен использовать некоторое маскирование для избавлений от деревьев и большинства облаков.

После того как у меня есть изображение маскированное, что лучший способ состоит в том, чтобы сравнить подобие 'хорошему' изображению? Я предполагаю "сравнить" команду, которой удовлетворяют для этого задания? Как я получаю числовое значение 'подобия' от этого?

ОБНОВЛЕНИЕ 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();

Я выполнил это для различных демонстрационных изображений, и я получил результаты как ниже (скрученное изображение показывают ниже каждого образца):

(Извините - другой образец отображает с прошлого раза!)

сопроводительный текст http://www.freeimagehosting.net/uploads/f9a5a34980.jpg

Теперь я пытаюсь определить количество, как 'ridgy' изображение. Я пытался брать среднюю яркость изображения:

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

Но это дает, не дает значимые значения (0.0165, 0.0175 и 0.0174). Какие-либо лучшие пути?

27
задан Gavin Brock 28 March 2010 в 16:31
поделиться

3 ответа

Несколько конкретных рекомендаций, основанных на том, что у вас уже есть:

  1. Возьмите лучшее изображение (что-то вроде изображения 1), пропустите его через край обнаружения, откройте результат в любом графическом редакторе (подойдет MS Paint) и очистите все, кроме границы вершины горы (линия "китайской шляпы"). Это ваше сверточное ядро. Вы можете обрезать его (не изменять размер!) Сверху и снизу, чтобы сэкономить время на следующем шаге.
  2. Используйте функцию Convolve из PerlMagick (вы, кажется, уже знакомы с Perl и ImageMagick), чтобы свернуть ядро ​​с несколькими изображениями. На получившемся изображении вы должны увидеть резкий шип, соответствующий «правильному» положению ядра (совпадающий с горой на изображении).
  3. Относительная (к уровню окружающего шума) высота этого шипа будет больше, когда гора лучше видна. Сделав несколько репрезентативных изображений, вы сможете определить порог, который будет отделять хорошие изображения от плохих.
  4. Что бы вы ни делали, будут ложные срабатывания и ложные отрицания. Будь готов.
5
ответ дан 28 November 2019 в 05:52
поделиться

Думаю, вы работаете на слишком низком уровне. Быстрый проход через фильтр обнаружения краев очень четко разделил набор изображений на (1, 3) и (2, 4). Особенно, если эти изображения получены с фиксированной точки обзора камеры, найти совпадение с прототипной формой в (1) будет относительно легко с алгоритмической точки зрения. Даже ваш случай (4) может дать вам область частичного сопоставления, которую вы могли бы эвристически определить, достаточно ли там горы для рассмотрения.

9
ответ дан 28 November 2019 в 05:52
поделиться

Ответ зависит от того, насколько конкретна проблема. Если это одна и та же гора из одного и того же POV, обнаружение бега и краев по заведомо исправному изображению и использование его в качестве основы для свертки по изображениям, обнаруженным по краям из корпуса. Если вас интересует только край горы, вручную удалите другие объекты из базовой линии.

4
ответ дан 28 November 2019 в 05:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: