Получение координат вершин листа А4 с монетами на нем для дальнейшего проективного преобразования и обнаружения монет - PullRequest
0 голосов
/ 19 января 2020

Мне нужно изменить свое наклонное изображение так, чтобы я мог найти монеты на бумаге формата А4. До сих пор я получал четыре координаты краев своей бумаги, вручную выбирая их с помощью ginput.

targetImageData = imread('coin1.jpg');
imshow(targetImageData);
fprintf('Corner selection must be clockwise or anti-clockwise.\n');
[X,Y] = ginput(4);

Есть ли способ автоматизировать этот процесс, скажем, применить некоторый детектор краев, а затем найти координаты каждой вершины, а затем передать их в качестве координат, необходимых для преобразования?

Ручной выбор:
enter image description here

Результат:
enter image description here

1 Ответ

0 голосов
/ 20 января 2020

Вы можете попробовать использовать detectHarrisFeatures на цветовом канале S цветового пространства HSV:

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

Размер изображения изменяется с коэффициентом 0,25 для устранения шума.

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

Вот пример кода:

%Read input image
I = imread('im.png');

%Remove the margins, and replace them using padding (just because the image is a MATLAB figure)
I = padarray(I(11:end-10, 18:end-17, :), [10, 17], 'both', 'replicate');

HSV = rgb2hsv(I);

%H = HSV(:, :, 1);%figure;imshow(H);title('H');
S = HSV(:, :, 2);%figure;imshow(S);title('S');
%V = HSV(:, :, 3);%figure;imshow(V);title('V');

%Reduce image size by a factor of 0.25 in each axis
S = imresize(S, 0.25);

%S = imclose(S, ones(3)); %May be requiered

%Detect corners
corners = detectHarrisFeatures(S);

imshow(S); hold on;
plot(corners.selectStrongest(4));

Результат:
enter image description here


Другой подход, который вы можете попробовать:

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