Вы можете попробовать использовать 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));
Результат:
Другой подход, который вы можете попробовать:
- Сфотографируйте без монет.
- Отметьте углы вручную и извлеките элементы 4 углов.
- Используйте сопоставление изображений методы, позволяющие сопоставить изображение с монетами с изображением без монет (мах с четырьмя углами).