Извлечь прямоугольное изображение из отсканированного изображения

У меня есть отсканированные копии банкнот, из которых мне нужно извлечь только прямоугольные банкноты. Хотя отсканированные копии имеют очень пустой фон, саму заметку можно правильно повернуть или выровнять. Я использую матлаб.

Пример ввода:

введите здесь описание изображения

Пример вывода:

введите здесь описание изображения

Я пытался использовать пороговое значение и обнаружение края canny/sobel безрезультатно. Я также попробовал решение, приведенное здесь, но оно обнаруживает все изображение для обрезки и не работает для повернутых изображений.

PS: Моя основная задача - определить номинал валюты. Есть несколько методов, которые, как я думал, я мог бы использовать:

  1. На основе цвета, поскольку все банкноты имеют разные основные цвета. Преимущество этого метода в том, что он не зависит от поворота или масштаба входного изображения.
  2. Найдите маленький черный треугольник в левом нижнем углу заметки. Эта форма уникальна для каждого номинала.
  3. Вычисление разницы между двумя изображениями. Поскольку это небольшой проект, все входные изображения будут иметь одинаковое разрешение и разрешение, и, следовательно, после выравнивания разница между входными и истинными изображениями может дать приблизительную оценку.

Какой метод вы считаете наиболее жизнеспособным?


person vinayakshukl    schedule 27.10.2014    source источник
comment
Если у каждой валюты есть свой цвет, выберите цвет на основе, он выглядит наиболее надежным. Если вы пойдете на это, вам может даже не понадобиться обрезать изображение!   -  person Ander Biguri    schedule 27.10.2014
comment
Я так и думал. Но я мог бы использовать другие методы в качестве сравнительного исследования, чтобы показать разницу в точности между методами. Есть идеи по этому поводу?   -  person vinayakshukl    schedule 27.10.2014
comment
Ну, вы можете сделать это, это был бы хороший проект ;). Об удалении белого: попробуйте метод, который вы указали (даже с повернутыми изображениями). Вероятно, вы можете, удалив практически весь фон, повернуть изображение, если обнаружите 4 угла.   -  person Ander Biguri    schedule 27.10.2014
comment
Хорошо. Я использовал пороговое значение, медианный фильтр и небольшую обрезку, чтобы получить это: imgur.com/dGnq07Z Как найти угол на что вращать граничный прямоугольник?   -  person vinayakshukl    schedule 27.10.2014
comment
это сработало? Вы пробовали мой ответ?   -  person Ander Biguri    schedule 27.10.2014


Ответы (1)


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

У вас есть изображение, достаточно обрезанное и сегментированное. Для начала нужно убедиться, что ваше изображение без дырок. Так заполните их!

Iinv=I==0; % you want 1 in money, 0 in not-money;
Ifill=imfill(Iinv,8,'holes');     % Fill holes

После этого вы хотите получить только границу изображения:

Iedge=edge(Ifill);

И в конце вы хотите получить углы этого квадрата:

C=corner(Iedge);

Теперь, когда у вас есть 4 угла, вы сможете узнать угол этого повернутого «квадрата». Как только вы это сделаете:

Irotate=imrotate(Icroped,angle);

Оказавшись здесь, вы можете захотеть обрезать его снова, чтобы получить только деньги! (ааа деньги всегда как цель!)

Надеюсь это поможет!

person Ander Biguri    schedule 27.10.2014
comment
Спасибо за Ваш ответ! Вроде работало довольно хорошо, но была небольшая проблема - я пытался ее решить, но она все еще остается. Подробно отпишусь завтра утром. Спасибо за помощь! - person vinayakshukl; 27.10.2014
comment
Функция углов находит много углов на изображении, из которых только 4 являются правильными. Причина этого в том, что обнаружение края, выполненное до вызова этой функции, возвращает очень волнистый и «крайний» контур. Когда я пытаюсь найти 4 истинных угла, используя max_x, max_y и т. д., я получаю хорошие результаты для наклонных входных данных, но не для выровненных входных данных из-за волнистой природы краев. Пример: imgur.com/a/k9SxD Красным цветом отмечены все углы, синим — 4 верных угла. - person vinayakshukl; 28.10.2014
comment
@vinayakshukl Интересная проблема .... Я предлагаю вам сгладить изображение края, используя LoG или фильтр Гаусса, чтобы увидеть, что эти углы немного сглажены. Вы также можете попробовать расширить и размыть, чтобы увидеть, получаются ли у вас более гладкие изображения. Однако ваша проблема кажется очень подходящей для другого вопроса SO! поэтому, если эти предложения не работают, я рекомендую вам открыть вопрос с конкретной проблемой углов! - person Ander Biguri; 28.10.2014