Сходство изображения для одного и того же контента, но разной погоды - PullRequest
0 голосов
/ 19 октября 2018

Для двух изображений, одного в солнечную погоду и другого в дождливую погоду, практически без разницы в содержании и объектах, кроме погоды, есть ли метрика, чтобы сказать, что они очень похожи?Rainy image

Normal Image

Vs ... изображение, которое явно не очень похоже .. Not similar image

Ответы [ 3 ]

0 голосов
/ 20 октября 2018

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

Давайте назовем ваши три изображения rainy.png, sunny.png и other.png.Тогда NCC равен 1, когда изображения идентичны, и 0, когда они не имеют ничего общего.


Итак, сравните rainy.png с sunny.png, и они на 83% похожи:

convert -metric NCC sunny.png rainy.png -compare -format "%[distortion]" info:
0.831495

Теперь сравните rainy.png с other.png, и они на 21% похожи:

convert -metric NCC rainy.png other.png -compare -format "%[distortion]" info:
0.214111

И, наконец, сравните sunny.png с other.png, и они22% похожи:

convert -metric NCC sunny.png other.png -compare -format "%[distortion]" info:
0.22060

ImageMagick также предлагает другие метрики, такие как Средняя абсолютная ошибка , Структурное сходство и т. Д.на.Чтобы получить список параметров, используйте:

identify -list metric

Пример вывода

  • AE
  • DSSIM
  • Fuzz
  • MAE
  • MEPP
  • MSE
  • NCC
  • PAE
  • PHASH
  • PSNR
  • RMSE
  • SSIM

и выберите тот, который вы хотите, затем используйте -metric SSIM вместо -metric NCC, если хотите Структурное сходство вместо нормализованная взаимная корреляция .

0 голосов
/ 20 октября 2018

NCC и SSIM, вероятно, являются лучшими для использования при различном освещении, что может вызвать яркость / контрастность.Другие метрики не делают никакой нормализации яркости / контраста

SSIM дает мне 0,763003 для солнечного и дождливого и 0,236967 для солнечного и другого.Это коэффициент разделения 3,22.NCC дает мне 0,831495 и 0,220601 соответственно.Это коэффициент разделения 3,77.Так немного лучше.См. Ответ Марка Сетчелла о командах для них.

Еще одним способом было бы сначала обнаружить края на выровненном изображении в оттенках серого.Это смягчает против изменения яркости / контрастности и даже смещения цвета.

Вот этот подход с использованием 8-направленного оператора Собеля в Imagemagick.

convert bright.png -colorspace gray -equalize \
-define convolve:scale='!' \
-define morphology:compose=Lighten \
-morphology Convolve 'Sobel:>' bright_sobel.png


enter image description here

convert dull.png -colorspace gray -equalize \
-define convolve:scale='!' \
-define morphology:compose=Lighten \
-morphology Convolve 'Sobel:>' dull_sobel.png


enter image description here

convert other.png -colorspace gray -equalize \
-define convolve:scale='!' \
-define morphology:compose=Lighten \
-morphology Convolve 'Sobel:>' other_sobel.png


enter image description here

compare -metric ncc bright_sobel.png dull_sobel.png null:
0.688626

compare -metric ncc bright_sobel.png other_sobel.png null:
0.0756445         


Это коэффициент разделения 9,1.Так что немного лучше.

С обнаружением фронта вы, вероятно, можете использовать другие метрики, поскольку нормализация уже была выполнена с помощью операций выравнивания и оттенков серого.Но NCC все еще может быть лучшим здесь.

См. https://imagemagick.org/Usage/convolve/#sobel

ДОПОЛНЕНИЕ:

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

convert bright.png -equalize bright_eq.png

convert dull.png -equalize dull_eq.png

convert other.png -equalize other_eq.png


compare -metric NCC bright_eq.png dull_eq.png null:
0.861087

compare -metric NCC bright_eq.png other_eq.png null:
0.204296


Это дает коэффициент разделения 4,21, что немного лучше, чем 3,77 выше безуравнение.

ADDITION2:

Вот еще один способ, использующий мой скрипт redist, который пытается изменить статистику изображения на конкретное среднее значение и стандартное отклонение.(см. http://www.fmwconcepts.com/imagemagick/index.php)

. Я применяю его ко всем изображениям с одинаковыми аргументами для нормализации к одному и тому же среднему значению и стандартному стандартному стандарту, а затем выполняю извлечение резкого фронта перед выполнением сравнения. Redist аналогичен выравниванию, но используетраспределение Гаусса, а не плоское или постоянное. Альтернативой перенаправлению будет эквалайзинг гистограммы локальной области (lahe) или адаптивная коррекция гистограммы с ограничением контраста (clahe).в приведенных ниже командах нормализуются (в диапазоне от 0 до номинально 100%) и представляют среднее значение, смещение в одну сигму на левой стороне пика, смещение в одну сигму на правой стороне пика, где сигма подобнастандартное отклонение.

redist 50,50,50 bright.png bright_rdist.png


enter image description here

redist 50,50,50 dull.png dull_rdist.png


enter image description here

redist 50,50,50 other.png other_rdist.png


enter image description here



convert bright_rdist.png -canny 0x1+10%+30% bright_rdist_canny.png


enter image description here

convert dull_rdist.png -canny 0x1+10%+30% dull_rdist_canny.png


enter image description here

convert other_rdist.png -canny 0x1+10%+30% other_rdist_canny.png


enter image description here


сравнить -метрический ncc bright_rdist_canny.png dull_rdist_canny.png null: 0,345919

compare -metric ncc bright_rdist_canny.png other_rdist_canny.png null:
0.0323863


Это дает коэффициент разделения 10,68

0 голосов
/ 20 октября 2018

Я использовал промежуточные слои из CNN для такого рода надежного сравнения в некоторых проектах в прошлом.По сути, вы берете CNN, который был подготовлен для какой-либо задачи, такой как сегментация изображения, а затем пытаетесь определить слои или комбинации слоев, которые предлагают хороший баланс геометрических / фотометрических характеристик для вашего соответствия.Затем во время теста вы передаете изображения в CNN и сравниваете эти функции, например, с евклидовым расстоянием.Мои изображения были похожи на ваши, и мне нужно было что-то быстрое, поэтому в то время Enet был для меня хорошим выбором (ну, сейчас есть лучшие варианты).В итоге я использовал комбинацию функций из его 21-го и 5-го уровней, что оказалось очень хорошим на практике.Однако, если ваши изображения из последовательности, в которой вы можете использовать временную информацию, я настоятельно рекомендую вам взглянуть на SeqSLAM (извините, не удалось найти версию без платного доступа. Интересная вещь с этимявляется то, что он не требует каких-либо CNN , в режиме реального времени, и если память служит, использует только очень простые сравнения на основе пирамидальной интенсивности для сопоставления, аналогично SPP), так кака также это бумага, которая улучшает SeqSLAM со слоями из CNN.

...