1

Тема: AHK: Сравнить два изображения

Привет всем!

Вобщем-то мой вопрос прост:

Есть ли функция для сравнения 2-х изображений с получением процента отличия?
Возможно можно воспользоваться PixelSearch или он ищет пиксели только на экране монитора? Если нет, то как реализовать сравнение?

2

Re: AHK: Сравнить два изображения

Готовых не знаю.
Чтобы о чём-то думать, нужно знать: отличие заключается в оттенках, прозрачности или изображения могут быть совсем разными (требуются примеры)?

3 (изменено: akman, 2014-02-16 23:30:07)

Re: AHK: Сравнить два изображения

Да, отличие в оттенках черно-белой гаммы. Это будут изображения аудио файлов в графическом виде:

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

4

Re: AHK: Сравнить два изображения

Не совсем тривиальная задача, на мой скромный взгляд - малорешимая силами чистого АНК. Особенно если надо делать анализ быстро. Включение машинных кодов может решить эту проблему, но нужен человек, который сможет такую процедуру написать. Примерный алгоритм таков. 2 цикла, внутренний по Х, внешний по Y, сравниваются соответствующие точки в обоих изображениях. Совпадение (ч+ч или б+б) увеличивает А. Итогом работы будет дробь А/(X*Y), которая покажет относительное совпадение двух картинок.

Это примерно и очень приблизительно, поскольку большое преобладание одного цвета исказит результат, например для представленной выше картинки и полностью черного квадрата совпадение будет очень большим. Есть пути, чтоб решить и эту проблему, но сначала надо сделать высокоуровневую обвязку на АНК, а функцию анализа можно доделывать в процессе "испытаний". Вот такой фронт работ ))

5

Re: AHK: Сравнить два изображения

Может поможет эта информация -http://www.autohotkey.com/board/topic/2 … wo-images/
Наши англоязычные коллеги представили вот такой скрипт сравнения двух изображений

FileSelectFile, File1, , , Select File 1
FileSelectFile, File2, , , Select File 2
WindowSize := (A_ScreenWidth / 3) - 20
Gui, 1:+AlwaysOnTop +ToolWindow +LastFound
Gui, 1: Add, Pic, x0 y0, %File1%
Gui, 1:Show,% "y0 h" . WindowSize . " w" . WindowSize, Differences
hGui1 := WinExist()
WinSet, Trans, 255

Gui, 2:+AlwaysOnTop +ToolWindow +LastFound
Gui, 2: Add, Pic, x0 y0, %File1%
Gui, 2:Show,% "y0 x0 h" . WindowSize . " w" . WindowSize, File 1
hGui2 := WinExist()
WinSet, Trans, 255

Gui, 3:+AlwaysOnTop +ToolWindow +LastFound
Gui, 3: Add, Pic, x0 y0, %File2%
Gui, 3:Show,% "y0 x" . A_ScreenWidth - WindowSize - 10. "h" . WindowSize . " w" . WindowSize, File 2
hGui3 := WinExist()
WinSet, Trans, 255

hDc1 := DllCall("GetDC", "uint", hGui1)
hDc2 := DllCall("GetDC", "uint", hGui3)
DllCall("gdi32.dll\BitBlt", UInt,hDC1, Int, 0, Int, 0, Int, WindowSize, Int, WindowSize, UInt,hDC2, Int, 0, Int, 0, UInt, SRCINVERT := 0x660046) 
DllCall("gdi32.dll\ReleaseDC", UInt,hGui1,UInt,hDC1)
DllCall("gdi32.dll\ReleaseDC", UInt,hGui2,UInt,hDC2)
return

3GuiClose:
2GuiClose:
GuiClose:
ExitApp

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

6

Re: AHK: Сравнить два изображения

Чувствую, распознавание речи так не получится.

7

Re: AHK: Сравнить два изображения

Чувствую, распознавание речи так не получится.

ypppu, тема называется "AHK: Сравнить два изображения"
Может кому-то это понадобится для других целей

8

Re: AHK: Сравнить два изображения

Алгоритм А/(X*Y) правильный. Но малейший сдвиг по одной из осей и/или масштабирование по одной из осей даст маленький процент совпадения на выходе.

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

9 (изменено: akman, 2014-02-19 13:38:04)

Re: AHK: Сравнить два изображения

Не совсем тривиальная задача, на мой скромный взгляд - малорешимая силами чистого АНК.

Допустим это не для распознавания речи, просто есть задача вычислить минимальную разницу между изображениями.
Хотя-бы на наличие преобладания черного цвета или белого. Или эта задача тоже неподъемная для AHK?

10

Re: AHK: Сравнить два изображения

Задача, наверное, несложная, но будут ограничения по быстродействию. Какие требования к быстродействию?

11

Re: AHK: Сравнить два изображения

Какие требования к быстродействию?

Требований к быстродействию нет.

12

Re: AHK: Сравнить два изображения

Тогда более конкретно. Имеем два изображения, каждое из которых состоит из двух цветов: чёрного и белого.
Делаем в каждом изображении прозрачным чёрный цвет и помещаем их друг над другом в окне с зелёным фоном. Останется подсчитать, сколько % пикселей от площади картинки оказались зелёными.

13

Re: AHK: Сравнить два изображения

http://rosettacode.org/wiki/Percentage_ … AutoHotkey

14 (изменено: akman, 2014-02-25 15:42:42)

Re: AHK: Сравнить два изображения

Спасибо всем. Malcev, спасибо за ссылку, действительно работает! Тему можно закрыть.