Зразове зображення, яке ви розмістили, має відносно сильну перспективу (воно не відображається прямо з напрямку до нормальної поверхні), що може спричинити проблеми з технікою відповідності шаблонів, за допомогою якої використовується блокова обробка. Я припускаю, що ви повинні сприймати зображення з сильною перспективою, тому перше, що ми хочемо зробити, це оцінити перетворення зображення, яке видалить перспективну проекцію і призведе до виправленого зображення ("прямого зображення").
Виправлення перспективної проекції, коли відома форма
Кінцева мета попередньої обробки - знайти куточки того сірого прямокутника, який є фоновою кольоровою діаграмою. Я почав з простого порогу з постійним значенням. У літературі / Інтернеті є багато інформації про те, як зробити порогове значення, коли зображення має нерівномірне освітлення, але якщо ви можете, спробуйте виправити налаштування зображення таким чином, щоб освітлення було відносно рівним.
Я припускав, що кольорова діаграма займає досить велику частину екрана, тому це, мабуть, найбільша безперервна область зображення. Існує безліч чорно-білих функцій маркування (MATLABs bwlabel, IPP LabelMarkers, OpenCV має зовнішню бібліотеку cvblob), яка дасть кожному окремому підключеному регіону свій власний індекс. Після маркування ви можете розрахувати площі підключених компонентів за допомогою гістограми, а потім вибрати компонент з найбільшою площею.
Зазвичай корисно заповнити компоненти таким чином, щоб у компонента не було отворів, це зменшує кількість крайових пікселів.
Тепер ми можемо використовувати оператори пошуку ребер (я використовував метод на основі градієнта, але ви також можете простежити краю, дотримуючись білих пікселів, які з'єднані з чорними пікселями), щоб отримати пікселі, що належать до бордера.
Оскільки об'єктом, який нас цікавить, є прямокутник, я встановив чотири лінії до крайових пікселів, використовуючи надійну підгонку ліній (RANSAC). Знайшовши нову лінію, я видалив усі точки, які були близькі до знайденої лінії, це змусило подальших операцій підгонки повернути інші краї об'єкта. Нарешті, коли були знайдені всі ребра, я обчислив усі можливі перетини між набором ліній. З набору отриманих точок я видалив усі точки поза зображенням.
Тепер у нас є кути кольорової діаграми і, як ми знаємо розміри діаграми, ми можемо обчислити матрицю перетворення (гомографія, проекція між двома площинами. Для прямого лінійного перетворення (DLT) для вирішення ) між міліметровими координатами та координати пікселів.HHH
x=HX
Ця матриця перетворення може бути використана для перетворення вихідного зображення таким чином, що кольорова діаграма зображується прямо з напрямку нормальної поверхні.
Як видно, залишається лише радіальне викривлення. Коли ми використовували перетворення для перетворення зображення (2D-інтерполяція), ми вибрали такі інтерполяційні координати, що ми знаємо точне дозвіл зображення, тобто, тепер ми знаємо, наприклад, розмір літер.H
Якщо ми все-таки хочемо зробити якесь узгодження шаблону, ми можемо використовувати будь-який пристойний метод відповідності шаблонів. Метод не повинен бути інваріантним поворотом / масштабом, оскільки зображення вже виправлено.