Сравнение разноразмерных изображений

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Сравнение разноразмерных изображений

Сообщение MIT » 03.03.2009 (Вт) 15:56

Scarabey писал(а):MIT
Извини конечно, но мне кажется ты совсем обленился, и не хочешь искать сам, это же все есть в MSDN!
773FF писал(а):Простите за вредность, но хочется читать интересные ответы на интересные вопросы.
Думаю данный вопрос покажется как интересным, так и нестандартным. В любом случае я с таким никогда не сталкивался и никаких аналогичных решеных впросов не видел...

Задача: сравнить изображения. Скажете "фу, иди в ****, это обсуждалось!!!"
Особенности задачи: изначально дается 2 изображения, причем размеры, качество и формат оных может отличаться, отсюда следует, что попиксельное сравнение невозможно (в 99,99999% случаев), и придется изобретать что-то свое.

Мои мысли по данному поводу:
1)Приводим изображения к обному формату (32bpp) и одному размеру (наверно к меньшему)
2)Смотрим, цветные ли у нас изображения. Если одно из них чб, то обесцвечиваем второе
3)Непосредственно проверка. Поскольку качество изображений (по условию) разное, то будем использовать усредненно-блочную систему:
>выбираем определенный квадрат (прямокгольник) данных, например с 1х1 до 5х5, находим среднеарифветическое число каждого канала (не общее, так как если поменять каналы местами, то получится, что сумма каналов одна, а визуально изображения разное)
>сдвигаем оценочную область вправо (вниз) на 1 (2 или 5 - надо попробовать будет) px и проводим те же операции
>оценивем таким же образом второе изображение
>сравниваем полученные числа квадратов по каналам, записывая в массив процентную разницу между числами
>[здесь я тоже не уверен - надо пробовать] находим среднеарифмитическое число процентной разницы (или работаем с каждым числом отдельно), и если полученное соотношение разницы меньше 10%, то можно сказать, что изображения похожи, если меньше 5%, то возможно, что одинаковые.

На счет очередности 2ого и 2ого также до конца не уверен.

У кого какие соображения есть на данную тему?
З.Ы.: все это только теория, но в голове оно работает, причем неплохо
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Сравнение разноразмерных изображений

Сообщение ANDLL » 03.03.2009 (Вт) 16:26

Смотрим, цветные ли у нас изображения. Если одно из них чб, то обесцвечиваем второе
Уже странно. Универсального алгоритма что бы "обсецветить" изображение нету. Значит после того как ты применишь свой алгоритм твоей "чб" изображение может очень сильно отличаться от другого чб-изображения, даже если они получились из одинакового цветного(но просто разными алгоритмами)
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Сравнение разноразмерных изображений

Сообщение MIT » 03.03.2009 (Вт) 16:54

Я знаком только с одним алгоритмом очернобеливаня:
Код: Выделить всё
                    .B = CByte(.B * 0.299 + .G * 0.587 + .R * 0.114)
                    .G = .B
                    .R = .B


А какие еще существуют?
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Сравнение разноразмерных изображений

Сообщение MIT » 03.03.2009 (Вт) 17:07

А вообще в независимости от алгоритма преобразования в RGB неаозможно описать серый цвет по-другому.
Любой серый (я про RGB) - это "одинаковость" во всех каналах (кроме альфы, разумеется): 55;55;55, BB;BB;BB. И нет никакой разницы каким путем ты цвет получишь - если алгоритм верный, то он выдаст верный цвет, а разность на 2-3 легко нивилируется конечными 5%ами
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Сравнение разноразмерных изображений

Сообщение ANDLL » 03.03.2009 (Вт) 17:09

Zomg :)
Существует очень много, и как обычно всех их знает гугл.
Если вкратце - нормальное превращение цветной картинки в чернобелую прежде всего сохраняет контрастные переходы, что бы например любой круг с разноцветными секторами остался различимым - в твоем примере легко подобрать цвета когда "секторы" на круге исчезнут.
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Сравнение разноразмерных изображений

Сообщение ANDLL » 03.03.2009 (Вт) 17:10

А вообще в независимости от алгоритма преобразования в RGB неаозможно описать серый цвет по-другому.
Нет, это очевидно не верно
И нет никакой разницы каким путем ты цвет получишь - если алгоритм верный, то он выдаст верный цвет, а разность на 2-3 легко нивилируется конечными 5%ами
Да ну господь с вами. Черно-белых цветов 255, "цветных" - 255*255*255. Не может быть "единственно верного" преобразования из одного в другой или наоборот
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Сравнение разноразмерных изображений

Сообщение MIT » 03.03.2009 (Вт) 17:13

Да ну? И какой же верный цвет выдаст алгоритм для
а) чисто синего
б) чисто красного
в) чисто зеленого
?

чисто серый
Последний раз редактировалось MIT 03.03.2009 (Вт) 17:26, всего редактировалось 1 раз.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Re: Сравнение разноразмерных изображений

Сообщение ANDLL » 03.03.2009 (Вт) 17:21

MIT писал(а):
Да ну? И какой же верный цвет выдаст алгоритм для
а) чисто синего
б) чисто красного
в) чисто зеленого
?

чисто белый
Ну это то про что я говорил.
Твое преобразование не различит красный круг на синем фоне. Любое качественное - различит
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Сравнение разноразмерных изображений

Сообщение MIT » 03.03.2009 (Вт) 17:28

Там серый, а не белый - ошибся, исправил.
Но все равно, толку от этого не много.
Значит проверку на серость и "осеривание" выкидываем. Остается только сам алгоритм.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Joo
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 762
Зарегистрирован: 14.08.2008 (Чт) 11:55
Откуда: Казахстан

Re: Сравнение разноразмерных изображений

Сообщение Joo » 03.03.2009 (Вт) 17:34

MIT писал(а):Задача: сравнить изображения. Скажете "фу, иди в ****, это обсуждалось!!!"
Особенности задачи: изначально дается 2 изображения, причем размеры, качество и формат оных может отличаться, отсюда следует, что попиксельное сравнение невозможно (в 99,99999% случаев), и придется изобретать что-то свое.

Мои мысли по данному поводу:
1)Приводим изображения к обному формату (32bpp) и одному размеру (наверно к меньшему)
2)Смотрим, цветные ли у нас изображения. Если одно из них чб, то обесцвечиваем второе
3)Непосредственно проверка. Поскольку качество изображений (по условию) разное, то будем использовать усредненно-блочную систему:
>выбираем определенный квадрат (прямокгольник) данных, например с 1х1 до 5х5, находим среднеарифветическое число каждого канала (не общее, так как если поменять каналы местами, то получится, что сумма каналов одна, а визуально изображения разное)
>сдвигаем оценочную область вправо (вниз) на 1 (2 или 5 - надо попробовать будет) px и проводим те же операции
>оценивем таким же образом второе изображение
>сравниваем полученные числа квадратов по каналам, записывая в массив процентную разницу между числами
>[здесь я тоже не уверен - надо пробовать] находим среднеарифмитическое число процентной разницы (или работаем с каждым числом отдельно), и если полученное соотношение разницы меньше 10%, то можно сказать, что изображения похожи, если меньше 5%, то возможно, что одинаковые.

На счет очередности 2ого и 2ого также до конца не уверен.

У кого какие соображения есть на данную тему?
З.Ы.: все это только теория, но в голове оно работает, причем неплохо

М-да, не че так придумал....
Конечно, можно написать алгоритм, который будет сравнивать изображения, и сообщать, подобны ли они... Это довольно непростая задача, ты в своих мыслях далек от истины...
Во первых после ресайза изображение исказится, и после очернобеливания, с точки зрения обычного алгоритма, твоего даже, это будут два абсолютно разных изображения.
"Им будет не просто, тем кто полагается на истину авторитета, вместо того чтобы полагаться на авторитет Истины"
Джеральд Месси, Египтолог

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Сравнение разноразмерных изображений

Сообщение MIT » 03.03.2009 (Вт) 19:02

Scarabey писал(а):Это довольно непростая задача
Сложно? Не думаю.
Scarabey писал(а):ты в своих мыслях далек от истины...
А где же она, истина-то?
Scarabey писал(а):Во первых после ресайза изображение исказится
Во! Значит если 2 изображения будут похоже искажены, значит они похожи и сами (а где во-вторых?)
Scarabey писал(а):и после очернобеливания
Очернобеливание уже выкинули. Пусть это будут разные изображения
Scarabey писал(а):это будут два абсолютно разных изображения.
Осталость только проверить...
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Alec
Бывалый
Бывалый
 
Сообщения: 275
Зарегистрирован: 31.08.2008 (Вс) 0:15
Откуда: Ростов-на-Дону

Re: Сравнение разноразмерных изображений

Сообщение Alec » 03.03.2009 (Вт) 21:23

MIT писал(а):Я знаком только с одним алгоритмом очернобеливаня:
Код: Выделить всё
                    .B = CByte(.B * 0.299 + .G * 0.587 + .R * 0.114)
                    .G = .B
                    .R = .B


А какие еще существуют?

Точнее CByte(.R * 0.299 + .G * 0.587 + .B * 0.114)
По этому алгоритму даже системы цветного телевидения работают.
MIT писал(а):
Да ну? И какой же верный цвет выдаст алгоритм для
а) чисто синего
б) чисто красного
в) чисто зеленого
?

чисто серый

Если быть более точным, то:
а) синий &HFF0000 -- > 255*0.114=29.07 --> &H1D1D1D
б) красный &0000FF -->255*0.299=76.245 --> &H4C4C4C
в) зеленый &00FF00 --> 255*0.587=149.685 -->&H959595
Чисто серый (что и не удивительно для черно-белого режима) но разного уровня. Зеленый, например, много светлее синего.
ANDLL писал(а):Твое преобразование не различит красный круг на синем фоне. Любое качественное - различит

По условиям задачи одно изображение уже черно-белое, на нем ни красного круга, ни синего фона.
Иногда лучше вовремя остановиться...
И начать заново!

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Сравнение разноразмерных изображений

Сообщение MIT » 03.03.2009 (Вт) 22:07

Alec писал(а):Точнее CByte(.R * 0.299 + .G * 0.587 + .B * 0.114)
Эээ... Что, правда? :shock:
Alec писал(а):Чисто серый (что и не удивительно для черно-белого режима) но разного уровня.
:thumright:

А (мне все же интересно) как узнать сам факт того, что изображение чернобелое?
Мысль: просматривать попиксельно информацию, и если больше 1% пикселей не соответствуют условию r=g=b, то значит, что изображение скорее-всего цветное.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Dry
Новичок
Новичок
Аватара пользователя
 
Сообщения: 26
Зарегистрирован: 08.02.2007 (Чт) 2:03

Re: Сравнение разноразмерных изображений

Сообщение Dry » 04.03.2009 (Ср) 23:19

Не совсем понятно каким образом программа сможет "понять" похоже ли они или нет.

Взять даже тот же пример: любой круг с разноцветными секторами. У одной из картинок пусть один сектор будет больше - и как считать похоже они или нет? А если у них вообще разное кол-во секторв похоже или нет? Кто-то скажет похожи, а кто-то нет. Тогда как програма может однозначно выполнить это сравнение.. :?:

Или надо как то конкретизировать ето сравнение, а то врятли можно сделать что-то правильно работающее :)

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Сравнение разноразмерных изображений

Сообщение MIT » 05.03.2009 (Чт) 0:26

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

Dry писал(а):Или надо как то конкретизировать ето сравнение, а то врятли можно сделать что-то правильно работающее
Если есть конструктивные идеи, то не стесняйся - предлагай :)
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Dry
Новичок
Новичок
Аватара пользователя
 
Сообщения: 26
Зарегистрирован: 08.02.2007 (Чт) 2:03

Re: Сравнение разноразмерных изображений

Сообщение Dry » 05.03.2009 (Чт) 1:51

Скажи задача программы состоит в том что бы она выдавала в итоге ответ: Похожа или Непохожа? :)

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Сравнение разноразмерных изображений

Сообщение MIT » 05.03.2009 (Чт) 9:29

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

А по поводу примера с логическим сравнением - этого пока не надо. Задача в том, что есть 2 одинаковые (когда-то) картинки с разным расширением и качеством, и надо определить одна и та же это картинка, или все же подсунули две разные.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Alec
Бывалый
Бывалый
 
Сообщения: 275
Зарегистрирован: 31.08.2008 (Вс) 0:15
Откуда: Ростов-на-Дону

Re: Сравнение разноразмерных изображений

Сообщение Alec » 05.03.2009 (Чт) 21:34

MIT писал(а):есть 2 одинаковые (когда-то)

А после "когда-то" картинки меняли только размер?
А обрезка? Поворот? (Туда-же - отражение)
Изменение яркости/контрастности/гамма-коррекция?
Фильтрация (коих методов тысячи)?
Да и мало ли всяких инструментов в практически любом редакторе картинок.
MIT писал(а):картинки с разным расширением и качеством

Что подразумевается под качеством? Изменение качества JPEG при сохранении? Царапины, грязь и пр.?
Тебе нужно определиться с тем - что МОГЛО произойти с исходной картинкой, и оттуда плясать с методикой.
Иногда лучше вовремя остановиться...
И начать заново!

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Сравнение разноразмерных изображений

Сообщение MIT » 05.03.2009 (Чт) 22:30

Alec писал(а):А обрезка? Поворот? (Туда-же - отражение)Изменение яркости/контрастности/гамма-коррекция?Фильтрация (коих методов тысячи)?Да и мало ли всяких инструментов в практически любом редакторе картинок.
Нет, нет и еще раз нет. Мне этого пока не надо. Я же конкретизировал задачу до весьма узкой. Что бы было еще популярнее можно привести такой пример: есть картинка и ее эскиз(т.е. то же самое изображение, но с меньшим разрешением, а соответсвенно и качеством, наличие остальных изменений означает факт различие картинок), надо определить так ли это на самом деле (является ли одна картинка эскизом/оригиналом относительно другой).
Даже если вчитаться (или просто прочитать) название темы, то становится понятно, что другая обработка над изображением не подразумевается.

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

Alec писал(а):Что подразумевается под качеством? Изменение качества JPEG при сохранении? Царапины, грязь и пр.?
В данном контексте примерно это:
Изображение Изображение

Первая - оригинал изображеия
Вторая - эскиз, растянутый до размеров оригинала.
Разница между ними и есть качество.

Все остальные похожие изображения одинаковыми (по отношению к оригиналу) признать нельзя:
Изображение Изображение Изображение

Вот примерно так. Если у тебя есть мысли по созданию алгоритма, который все эти изображения признает похожими - поделись.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Dry
Новичок
Новичок
Аватара пользователя
 
Сообщения: 26
Зарегистрирован: 08.02.2007 (Чт) 2:03

Re: Сравнение разноразмерных изображений

Сообщение Dry » 06.03.2009 (Пт) 13:50

Мда.. поразмышлял я поразмышлял и.. - конструктивных идеи, к сожалению нет :roll:
Задача действительно не простая. Если человеческий мозг способен определить что изображения разного размера - похожи, то как это сделать программе я не знаю, если, как уже было сказано:
Во первых после ресайза изображение исказится, и после очернобеливания, с точки зрения обычного алгоритма, твоего даже, это будут два абсолютно разных изображения.


P.S. если получится как-то решить ету задачу, поделись - очень интересно! :)

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Сравнение разноразмерных изображений

Сообщение MIT » 06.03.2009 (Пт) 14:41

Я же писал(а):научил распозновать картинки с более-менее нормальной точностью. Как доделаю - отпишусь.

Dry писал(а):как уже было сказано:Во первых после ресайза изображение исказится, и после очернобеливания, с точки зрения обычного алгоритма, твоего даже, это будут два абсолютно разных изображения.
Поразмышляй еще над такой вещью: есть картинка 200х200, если из нее сделать эскиз, например, 100х50, то она несомненно исказится; теперь растяни эскиз до прежнего размера (200х200) и скажи мне что изменилось.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Dry
Новичок
Новичок
Аватара пользователя
 
Сообщения: 26
Зарегистрирован: 08.02.2007 (Чт) 2:03

Re: Сравнение разноразмерных изображений

Сообщение Dry » 06.03.2009 (Пт) 16:17

гхм.. изменилось - качество. :D

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Сравнение разноразмерных изображений

Сообщение MIT » 06.03.2009 (Пт) 17:06

Вот и я про тоже: ни царапин ни грязи не появится, искажения не будет, все пропорции останутся на месте, так что задачу в даных условиях сложной не считаю :wink:
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Alec
Бывалый
Бывалый
 
Сообщения: 275
Зарегистрирован: 31.08.2008 (Вс) 0:15
Откуда: Ростов-на-Дону

Re: Сравнение разноразмерных изображений

Сообщение Alec » 07.03.2009 (Сб) 19:00

Тогда как ты и писал - приводить к одному размеру, только к меньшему.
И, думаю, очернобеливать оба изображения, т.е. приводить их к 8bpp, чтобы не заморачиваться с цветовыми компонентами. Если картинки непохожи, то и их черно-белые варианты непохожи, а если черно-белые варианты признаны алгоритмом похожими, то можно и цвета проверить.
Иногда лучше вовремя остановиться...
И начать заново!


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 58

    TopList