Образец, который вы разместили, имеет относительно сильную перспективу (он не отображается прямо в направлении нормали поверхности), что может вызвать проблемы с методами сопоставления шаблонов с использованием обработки блоков. Я предполагаю, что вы должны сделать изображение с сильной перспективой, поэтому первое, что мы хотим сделать, - это оценить преобразование изображения, которое удалит перспективную проекцию и приведет к выпрямленному изображению («прямое изображение»).
Исправление проекции перспективы, когда форма известна
Конечная цель предварительной обработки - найти углы этого серого прямоугольника, который является фоном цветовой диаграммы. Я начал просто с порога с постоянным значением. Литература / Интернет содержит много информации о том, как выполнить настройку порога, когда изображение имеет неравномерное освещение, но если вы можете, попробуйте исправить настройку изображения так, чтобы освещение было относительно равномерным.

Я предположил, что цветовая диаграмма занимает довольно большую часть экрана, поэтому это, вероятно, самая большая непрерывная область изображения. Существует много функций черно-белой маркировки (MATLABs bwlabel, IPPs LabelMarkers, OpenCV имеет внешнюю библиотеку cvblob), которая дает каждому отдельному связанному региону свой собственный индекс. После маркировки вы можете рассчитать площади подключенных компонентов, используя гистограмму, а затем выбрать компонент с наибольшей площадью.

Обычно рекомендуется заполнить компоненты так, чтобы у компонента не было отверстий, это уменьшает количество краевых пикселей.

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

Поскольку интересующий нас объект - это прямоугольник, я подгонял четыре линии к краевым пикселям с помощью надежной подгонки линий (RANSAC). После нахождения новой линии я удалил все точки, которые были близки к найденной линии, это вынуждает последующие операции подгонки возвращать другие ребра объекта. Наконец, когда все ребра были найдены, я вычислил все возможные пересечения между множеством линий. Из множества полученных точек я удалил все точки за пределами изображения.
Теперь у нас есть углы цветовой диаграммы и, поскольку мы знаем размеры диаграммы, мы можем вычислить матрицу преобразования (гомография, проекция между двумя плоскостями. Использовать прямое линейное преобразование (DLT) для решения ) между миллиметровыми координатами и координаты пикселей.HHH
x=HX
Затем эту матрицу преобразования можно использовать для преобразования исходного изображения таким образом, чтобы цветовая диаграмма отображалась прямо в направлении нормали поверхности.

Как видно, осталось только радиальное искажение. Когда мы использовали преобразование для преобразования изображения (2D-интерполяция), мы выбирали координаты интерполяции так, чтобы мы знали точное разрешение изображения, а это означает, что мы теперь знаем, например, размер букв.H
Если мы все еще хотим выполнить какое-либо сопоставление с шаблоном, мы можем использовать любой подходящий метод сопоставления с шаблоном. Метод не должен быть инвариантным к повороту / масштабированию, поскольку изображение уже выпрямлено.
