Перейти к содержимому
Compvision.ru
lina_malina

эквализация гистограммы

Recommended Posts

Доброго времени суток!

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

Например, на выходе обработке следующей картинки получаю следующее -прикрепила картинку. Пробовала применить эту операцию на трех каналах модели bgr(синяя картинка) и на канале V модели HSV(красная картинка).

Код простой

Mat q(imread("D://dok (0).bmp")); 
Mat qq;
resize(q, qq, Size(500, 500), 1);
imshow("1", qq);

vector<Mat> channel;
split(qq, channel);
equalizeHist(channel[0], channel[0]);
//imshow("2", channel[0]);
equalizeHist(channel[1], channel[1]);
//imshow("3", channel[1]);
equalizeHist(channel[2], channel[2]);
//imshow("4", channel[2]);

merge(channel, qq);
imshow("5", qq);
return(0);

Подскажите, пожалуйста, в чем может быть ошибка?

hsV.png

rgb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Так изображение цветное предполагается ?

Если задача OCR-подобная , обычно вначале пререводят в одноканальное серое (см. cvtColor).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну а что же Вы хотели :) шум тоже изображение.

Посмотрите мою реализацию одной хорошей статейки, есть где то на форуме, но проще на SoF найти :)

http://stackoverflow.com/questions/22122309/opencv-adaptive-threshold-ocr/22127181#22127181

(как выяснилось позже, есть особенности работы алгоритма на разных версиях OpenCV).

Можете попробовать ретинекс еще (посмотрите, есть на форуме ветка).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

отличный результат!!!!!!! правда, не все поняла, ну да ладно.


а есть какой-то метод нормализации простенький, который можно применять ко всем изображениям, а работать он будет только на таких "плохих" изображениях? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Это должно помочь уменьшить шум.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А еще не подскажите, Вы не сталкивались  случайно с LBP гистограммами в opencv? Не нашла в интернете, есть ли функция, которая стоит эту гистограмму? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

На гит-хабе довольно много такого добра.

https://github.com/bytefish/opencv/tree/master/lbp

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

так много кода, спасибо. 

посмотрела код, сделала вывод, что не так уж и сложно написать самой под себя, смысл поняла! спасибо большое

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Поищите "Pietikäinen M., Hadid A., Zhao G., Ahonen T. Computer Vision Using Local Binary Patterns".

В сети есть точно (на twirpx.com, например) :)  .

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо за советы!!

 

Возникла другая проблема. При использовании функции cvtColor(NEW, hsv1, CV_BGR2HSV) изображение превращается из белого скана в красный?? В чем может быть проблема? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
4 minutes ago, lina_malina said:

Спасибо за советы!!

 

Возникла другая проблема. При использовании функции cvtColor(NEW, hsv1, CV_BGR2HSV) изображение превращается из белого скана в красный?? В чем может быть проблема? 

Что значит превращается? Если вы имеете в виду, что после cv:imshow(), или cv::imwrite() цветовая гамма изменяется, то это нормально, т.к. cv::Mat не хранит информацию о цветовом пространстве и все функции по умолчанию будут работать с картинкой как с BGR, если иного не указано явно. А точке (255; 255; 255) в пространстве BGR соответствует точка (0, 0, 255) в HSV пространстве, т.е. красный цвет с точки зрения BGR.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

до этого работала с IplImage, таких проблем не было) а тут mat))) спасибо за оперативный ответ! 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а еще дилетантский вопрос.

Хочу выяснить цветное изображение или нет. Алгоритм такой: исходное img1 (BGR) перевожу в grayscale, потом обратно в BGR, получаю img2. Сравниваю гистограммы img1 и  img2 корреляционным методом. Если гистограммы схожи, то исходное изображение серое. Цветные фотки фильтрует нормально. Изображения, приближенные к серым тонам примерно 50 на 50 фильтрует. Странно. Скан документов тоже с переменным успехом.

при cvtcolor из grayscale в BGR, наверное, значение канала утраивается на три канала в BGR. Из-за этого могут быть такие неточности. это предположение.

какие альтернативные способы есть для идентификации серых или цветных изображений?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
25 minutes ago, lina_malina said:

а еще дилетантский вопрос.

Хочу выяснить цветное изображение или нет. Алгоритм такой: исходное img1 (BGR) перевожу в grayscale, потом обратно в BGR, получаю img2. Сравниваю гистограммы img1 и  img2 корреляционным методом. Если гистограммы схожи, то исходное изображение серое. Цветные фотки фильтрует нормально. Изображения, приближенные к серым тонам примерно 50 на 50 фильтрует. Странно. Скан документов тоже с переменным успехом.

при cvtcolor из grayscale в BGR, наверное, значение канала утраивается на три канала в BGR. Из-за этого могут быть такие неточности. это предположение.

какие альтернативные способы есть для идентификации серых или цветных изображений?

Для начал неплохо бы определиться, что вы понимаете под серым изображением.
Вообще да, cvtColor при переходе от grayscale к bgr просто в три канала пишет одно и тоже число. Соответственно, чисто теоретически, если исходное изображение серое, то при конвертации Исходное -> GRAY -> BGR, евклидово расстояние между исходным и результирующим изображением должно быть небольшим. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

при сравнении скриншотов таким образом результат 0,98!а сканы от 0,20-0,50!!как так? (1- ид совпадение,0 - нет корреляции)

 

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

пусть серым изображением будет такое, глубина цвета которого равна 8. Только у меня картинки особенным образом загружаются и всегда имеют три канала

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×