lina_malina 0 Жалоба Опубликовано January 7, 2016 Доброго времени суток! Начала работу с эквализацией гистограмм, результаты подозрительные, мне кажется, что-то не так делаю. Например, на выходе обработке следующей картинки получаю следующее -прикрепила картинку. Пробовала применить эту операцию на трех каналах модели 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); Подскажите, пожалуйста, в чем может быть ошибка? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано January 7, 2016 Так изображение цветное предполагается ? Если задача OCR-подобная , обычно вначале пререводят в одноканальное серое (см. cvtColor). Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
lina_malina 0 Жалоба Опубликовано January 7, 2016 лучше бы цветное.. вот грейскейл. шумы это норма? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано January 7, 2016 Ну а что же Вы хотели шум тоже изображение. Посмотрите мою реализацию одной хорошей статейки, есть где то на форуме, но проще на SoF найти http://stackoverflow.com/questions/22122309/opencv-adaptive-threshold-ocr/22127181#22127181 (как выяснилось позже, есть особенности работы алгоритма на разных версиях OpenCV). Можете попробовать ретинекс еще (посмотрите, есть на форуме ветка). Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
lina_malina 0 Жалоба Опубликовано January 7, 2016 отличный результат!!!!!!! правда, не все поняла, ну да ладно. а есть какой-то метод нормализации простенький, который можно применять ко всем изображениям, а работать он будет только на таких "плохих" изображениях? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано January 7, 2016 Простенький вряд ли, можно попробовать перед бинаризацией провести анизотропную фильтрацию см BilateralFilter. Это должно помочь уменьшить шум. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
lina_malina 0 Жалоба Опубликовано January 10, 2016 А еще не подскажите, Вы не сталкивались случайно с LBP гистограммами в opencv? Не нашла в интернете, есть ли функция, которая стоит эту гистограмму? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано January 10, 2016 На гит-хабе довольно много такого добра. https://github.com/bytefish/opencv/tree/master/lbp Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
lina_malina 0 Жалоба Опубликовано January 10, 2016 так много кода, спасибо. посмотрела код, сделала вывод, что не так уж и сложно написать самой под себя, смысл поняла! спасибо большое Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано January 10, 2016 Поищите "Pietikäinen M., Hadid A., Zhao G., Ahonen T. Computer Vision Using Local Binary Patterns". В сети есть точно (на twirpx.com, например) . Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
lina_malina 0 Жалоба Опубликовано January 13, 2016 Спасибо за советы!! Возникла другая проблема. При использовании функции cvtColor(NEW, hsv1, CV_BGR2HSV) изображение превращается из белого скана в красный?? В чем может быть проблема? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
BeS 53 Жалоба Опубликовано January 13, 2016 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. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
lina_malina 0 Жалоба Опубликовано January 13, 2016 не подумала об этом... спасибо большое, Ваш ответ - бальзам на мою душу. Думала, что программа из-за этого неверно работает и все придется переделывать. до этого работала с IplImage, таких проблем не было) а тут mat))) спасибо за оперативный ответ! Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
lina_malina 0 Жалоба Опубликовано January 14, 2016 а еще дилетантский вопрос. Хочу выяснить цветное изображение или нет. Алгоритм такой: исходное img1 (BGR) перевожу в grayscale, потом обратно в BGR, получаю img2. Сравниваю гистограммы img1 и img2 корреляционным методом. Если гистограммы схожи, то исходное изображение серое. Цветные фотки фильтрует нормально. Изображения, приближенные к серым тонам примерно 50 на 50 фильтрует. Странно. Скан документов тоже с переменным успехом. при cvtcolor из grayscale в BGR, наверное, значение канала утраивается на три канала в BGR. Из-за этого могут быть такие неточности. это предположение. какие альтернативные способы есть для идентификации серых или цветных изображений? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
BeS 53 Жалоба Опубликовано January 14, 2016 25 minutes ago, lina_malina said: а еще дилетантский вопрос. Хочу выяснить цветное изображение или нет. Алгоритм такой: исходное img1 (BGR) перевожу в grayscale, потом обратно в BGR, получаю img2. Сравниваю гистограммы img1 и img2 корреляционным методом. Если гистограммы схожи, то исходное изображение серое. Цветные фотки фильтрует нормально. Изображения, приближенные к серым тонам примерно 50 на 50 фильтрует. Странно. Скан документов тоже с переменным успехом. при cvtcolor из grayscale в BGR, наверное, значение канала утраивается на три канала в BGR. Из-за этого могут быть такие неточности. это предположение. какие альтернативные способы есть для идентификации серых или цветных изображений? Для начал неплохо бы определиться, что вы понимаете под серым изображением. Вообще да, cvtColor при переходе от grayscale к bgr просто в три канала пишет одно и тоже число. Соответственно, чисто теоретически, если исходное изображение серое, то при конвертации Исходное -> GRAY -> BGR, евклидово расстояние между исходным и результирующим изображением должно быть небольшим. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
lina_malina 0 Жалоба Опубликовано January 14, 2016 при сравнении скриншотов таким образом результат 0,98!а сканы от 0,20-0,50!!как так? (1- ид совпадение,0 - нет корреляции) визуально серое изображение я считала серым...не могу сформулировать. видимо от этого и проблемы. пусть серым изображением будет такое, глубина цвета которого равна 8. Только у меня картинки особенным образом загружаются и всегда имеют три канала Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано January 14, 2016 Серое изображение, снятое при помощи цветного сенсора, будет содержать независимый шум в каждом канале, соответственно, оно будет визуально серым (так как глаз усредняет), но при ближайщем рассмотрении оно будет сложено с цветным шумом. Плюс цвет освещения не белый, и будет давать оттенок. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах