_Перевод дискуссии "[How to peel the labels from marmalade jars using Mathematica?][1]" с сайта Mathematica at StackExchange. Код, приведенный в статье, можно скачать [здесь][2] (~31 МБ). Выражаю огромную благодарность Кириллу Гузенко [KirillGuzenko][3] за помощь в переводе и подготовке публикации_
----
Как можно выделить содержимое этикетки с указанной ниже банки (точка съёмки кадра, геометрия банки, её содержимое — всё это нам неизвестно), Основная идея заключается в следующем:
* Находим этикетку.
* Находим границы этикетки.
* Находим отображение координат пикселей изображения на цилиндрические координаты.
* Трансформируем изображение с использованием найденного отображения.
Предлагаемый нами алгоритм работает только для изображений, в которых:
* Этикетка ярче фона (это нужно для обнаружения этикетки).
* Этикетка прямоугольная (это нужно для того, чтобы оценить качество отображения).
* Банка должна занимать вертикальное положение (это нужно для того, чтобы сохранить простую форму функции отображения).
* Банка должна быть цилиндрической (это нужно для того, чтобы сохранить простую форму функции отображения).
Следует заметить, что алгоритм модульный. То есть вы можете дописать свой алгоритм обнаружения этикетки, который не будет требовать тёмного фона, или можете написать свою функцию оценки качества отображения, которая позволит работать с овальными или многоугольными этикетками. Получившийся в конечном итоге алгоритм работает полностью автоматически (однако есть опция ручного задания границ банки), то есть берёт исходное изображение, после чего выдаёт изображение с сеткой и этикетку. [Читать дальше →][4]
[1]:
http://mathematica.stackexchange.com/questions/5676/how-to-peel-the-labels-from-marmalade-jars-using-mathematica
[2]:
http://data.wolframmathematica.ru/habrahabr/SweetProgramming/SweetProgramming.zip
[3]:
http://habrahabr.ru/users/kirillguzenko/
[4]:
http://habrahabr.ru/post/266517/#habracut