Russian Qt Forum

Qt => 2D и 3D графика => Тема начата: SunbeamRider от Декабрь 17, 2014, 10:44



Название: Определение границ прямоугольной област
Отправлено: SunbeamRider от Декабрь 17, 2014, 10:44
Привет. В общем задача у меня  такая стоит: Есть куча отсканированных изображений (.JPG) некоего куска бумаги, предположим это какая нибудь этикетка или билетик, причем прямоугольная. отсканирована неровно ( то бишь стороны не параллельны сторонам монитора ), и задача моей проги состоит в том чтобы выравнивать эти изображения и затем обрезать строго по границе картинки. В рукопашную это сделать не составило труда, я использовал фреймворк QGraphics, кинул на сцену изображение, сделал инструменты автоматического поворота, ( но при этом пользователь должен сам определить границу этикетки и провести линию вдоль нее ) и после поворота обрезать не сложно. И вот подошел момент когда нужно все это автоматизировать, то есть программно определять границы этого клятого билетика(этикетки), поворачивать его и выделять область обрезания. Проблема состоит в том, что границы (и сама картинка)отнюдь не однородные, и даже не четкие. У меня вертелись какие то мысли насчсет таблицы цветов, получения количественного показателя каждого цвета, усреднения этого значения и тп. Но до конкретного чего то дойти не выходит, плюс к тому не очень хорошо знаком с инструментами библиотеки. Вот собственно и вопрос: возможно у кого то был опыт с задачами такого рода или есть мысли по реализации алгоритма, буду безмерно благодарен. 


Название: Re: Определение границ прямоугольной област
Отправлено: __Heaven__ от Декабрь 17, 2014, 11:10
Если сканы однотипны и есть штрихкод, может, его как-то использовать для выравнивания относительно краев экрана?


Название: Re: Определение границ прямоугольной облас
Отправлено: Пантер от Декабрь 17, 2014, 11:19
По графике не помогу, но советую тебе приложить штуки 3 изображения к теме - людям будет проще тебе помочь.


Название: Re: Определение границ прямоугольной област
Отправлено: SunbeamRider от Декабрь 17, 2014, 11:20
К сожалению нет, сканы не однотипны, за исключением того, что все картинки прямоугольные и штрих кодов тоже нет.=(


Название: Re: Определение границ прямоугольной област
Отправлено: Igors от Декабрь 17, 2014, 11:21
Аттаченный пример картинки повысил бы шансы на ответ. Тут 2 задачи

1) Выделение "фона" одним цветом и фильтрация помех.
2) Сам поворот

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


Название: Re: Определение границ прямоугольной област
Отправлено: SunbeamRider от Декабрь 17, 2014, 11:29
Спасибо за совет, что то сразу не подумал, вот картинка до и после. (http://www.imageup.ru/img229/thumb/panorama1982265.jpg)


Название: Re: Определение границ прямоугольной област
Отправлено: SunbeamRider от Декабрь 17, 2014, 11:39
 
Цитировать
1) Выделение "фона" одним цветом и фильтрация помех.
Я немного дубовый в графике, что делает фильтрация помех? И где рыть в либе чтобы найти этот функционал? Матрицы?


Название: Re: Определение границ прямоугольной област
Отправлено: Igors от Декабрь 17, 2014, 11:52
Цитировать
1) Выделение "фона" одним цветом и фильтрация помех.
Я немного дубовый в графике, что делает фильтрация помех? И где рыть в либе чтобы найти этот функционал? Матрицы?
Нет. Напр где-то на краю нашлась точка с цветом сильно отличающимся от фонового. Без фильтра она будет схвачена как "начало изображения", а фильтр ее уберет. Дайте ссылку на доку Вашей либы, подберем.


Название: Re: Определение границ прямоугольной област
Отправлено: SunbeamRider от Декабрь 17, 2014, 11:58
Цитировать
Дайте ссылку на доку Вашей либы, подберем.
Вот ссылка на класс который я юзаю. http://qt-project.org/doc/qt-4.8/qimage.html (http://qt-project.org/doc/qt-4.8/qimage.html)


Название: Re: Определение границ прямоугольной област
Отправлено: _OLEGator_ от Декабрь 17, 2014, 14:35
Можно использовать мощность OpenCV для таких целей:
http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/hough_lines/hough_lines.html
http://docs.opencv.org/modules/imgproc/doc/feature_detection.html?highlight=houghlines#houghlines
http://docs.opencv.org/trunk/doc/py_tutorials/py_imgproc/py_contours/py_contours_begin/py_contours_begin.html


Название: Re: Определение границ прямоугольной облас
Отправлено: SunbeamRider от Декабрь 17, 2014, 16:15
Цитировать
Можно использовать мощность OpenCV для таких целей:]Можно использовать мощность OpenCV для таких целей
Спасибо, но мне необходимо по возможности обойтись функционалом qt


Название: Re: Определение границ прямоугольной област
Отправлено: Igors от Декабрь 17, 2014, 16:32
Вот ссылка на класс который я юзаю. http://qt-project.org/doc/qt-4.8/qimage.html (http://qt-project.org/doc/qt-4.8/qimage.html)
Ну Вы написали "QGraphics", я думал то какая-то либа :) В QImage этого нет, можно поискать нужный инструментарий (что в данном случае совершенно разумно), можно и самому сделать (дело вкуса). В последнем случае я бы делал так

- осреднил бы сначала весь имедж, т.е. каждый пиксель заменил на среднее от 8 соседей (незатейливый фильтр).

- прошелся бы по всем граничным пикселям, вычислил их средний цвет и макс отклонение от него (потом бы его немного увеличил)

ну и все, теперь можно находить углы


Название: Re: Определение границ прямоугольной област
Отправлено: SunbeamRider от Декабрь 17, 2014, 16:44
Igors, спасибо, буду пробовать)