Автоматическая обрезка изображений (автоматическая идентификация изображения на фоне) - PullRequest
2 голосов
/ 07 февраля 2011

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

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

В идеальном мире некоторые умники могли бы предложить, что обрезать, и дать пользователю возможность окончательно согласиться. Это позволило бы использовать менее совершенный алгоритм кадрирования.

После поиска «обрезки» вместо обрезки на основе первого ответа кажется, что я мог бы сделать это с помощью Imagemagick imagemagick.org/script/api.php

Кажется, Imagemagick имеет интерфейсы в PHP и Ruby. Он поддерживает обрезку «нечетких» изображений, в которых граница не соответствует. Проблема, на которую я обращаюсь, - это рекомендация о графическом движке, который имеет хорошую логику для поиска краев изображений. Есть ли лучший движок, на который я должен смотреть, чем imagemagick?

Ответы [ 3 ]

3 голосов
/ 07 февраля 2011

Проверьте, являются ли следующие результаты удовлетворительными. Я реализовал небольшую программу в Mathematica, чтобы сделать это. Если вам понравились результаты, я могу объяснить дополнительные алгоритмы, или вы можете проверить файлы справки Mathematica онлайн.

Начнем с этих изображений:

enter image description hereenter image description here

И определить следующую функцию:

f[image_] := 
 ImageCrop@
   ImageMultiply[image, 
    ColorNegate@
     Erosion[Dilation[
       DeleteSmallComponents[Binarize@ColorNegate@image, 10000], 3], 
      3]] // ImageAdjust  

И результаты:

enter image description hereenter image description here

НТН!

1 голос
/ 07 февраля 2011

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

Если вы знакомы с Adobe Photoshop, есть функция, которая выполняет именно то, что вы предлагаете (Изображение -> Обрезать). Он работает, просматривая выбранный пользователем угловой пиксель (верхний левый, верхний правый и т. Д.), А затем определяя самые отдаленные пиксели, которые не этого цвета.

В программировании вам нужно будет перебрать пиксели изображения и определить координату Y самого верхнего и самого нижнего пикселя, которая равна , а не выбранного цвета, координата X самого левого и самый правый. Эти координаты определяют размер культуры.

При принятии решения, является ли пиксель выбранным цветом или нет, вы можете ввести допуск, допуская разницу в процентах. Другими словами, если фон не является постоянным белым (RGB 255, 255, 255), вы можете захотеть внести некоторые изменения.

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

0 голосов
/ 08 февраля 2011

Одна фраза, которая может быть полезна, - «значимость» - определение «интересных» областей изображения. И место, где можно начать исследования, это Microsoft Research - вы можете привести примеры изображений с "интересной частью", обрисованной в общих чертах. Это достигает того, что вам нужно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...