-
Есть следующая задача. Сканирую какой либо объект на сканере, например 10 рублей при этом их накрываю белым листом бумаги. Получаю изображение 10 рублей на белом фоне.
Задача следующая, как автоматически вырезать 10 рублей (прямоугольником) из этой картинки, т.е. нужно просто вырезать изображение при этом откинуть пустые белые края.
Подскажите, есть ли готовые алгоритмы или как это можно реализовать???
Заранее спасибо.
-
Пройтись сканлайном по растру.
Найти первый пиксель по цвету не похожий на белый. (Надёюсь лист чист ;D)
И последний. Потом вырезать копиректом.
-
Задача следующая, как автоматически вырезать 10 рублей (прямоугольником) из этой картинки, т.е. нужно просто вырезать изображение при этом откинуть пустые белые края.
Думаю, такая функция должна быть в ПО к сканеру/вьюерах/редакторах, вряд ли тебе первому нужно обрезать лишнее после сканирования. Называется, наверное, auto-crop или как-то в этом духе.
Можно и самому написать. Но для того, чтобы надёжно выделить объект, фон должен быть контрастным, с белым поля бумажки могут слиться. Лучше чёрный или ещё какой-то контрастный цвет.
-
>Sapersky
Дело в том что стандартное ПО не нужно, нужно своё сделать.
>IPranker
А можно по подробнее что значит пройтись сканлайном по растру?
Заранее спасибо!!!
-
Судя по вопросам, надо нанять программиста.
-
> Незнайка (05.02.11 14:27) [3]
> А можно по подробнее что значит пройтись сканлайном по растру?
TBitmap.ScanLine.
-
спасибо, понял, посмотрим!!!
-
Хочу сравнить 2 соседние лини
В результате чего получил 2 PByteArray
Понятно, что оба PByteArray будут различные.
Можно ли их сравнить с каким либо коэффициентом расхождения?
Заранее спасибо
-
Число/Общее число:
- не совпаших;
- не близких по цвету/яркости
-
-
Делаете дубликат изображения в памяти. Усиляете контрастность. После этого преобразование в монохромное (2 цвета).
И тогда можно искать координаты в виде "отсечь белые поля-прямоугольники с краёв".
Копируете с оригинала найденный rect.
-
Контрастность лучше применять после обрезки, на бинаризацию она кстати не влияет. А бинаризацию лучше делать автоматическую по методу Отцу, с добовлением поправки на априори белый лист.
Для уменьшения влияния шума, нужно делать умное размытие. В некоторых алгоритмах бинаризации оно уже встроено.
-
Для сравнения 2-х лний достаточно вычесть эти элементы и просуммировать по модулю. Однако такой метод имеет недостатки. Мелкие распределённый шумы даёт большее отличие чем реально нужный сигнал который локалидован на небольшом пространстве. Есть идея вначале применять DoG, а вот после считать отличия, но боюсь что для 1 лини он будет сильно фильтровать результат. Умное размытие и фильтр Лапласа будет по лучше. Но всеравно метод будет давать погрешность, хотя в таком виде возможро будет приемлим.
-
хм.. Алгоритмы бинаризации разные же бывают, на тот что у меня был контрастность сильно влияла.