Как получить четыре угла повернутого изображения?

У меня изображение повернуто с imrotate следующим образом:

Im_requete=imread('lena.jpg');
Im_requete_G=rgb2gray(Im_requete);
Im_requete_G_scale_rot = imresize(imrotate(Im_requete_G,-20), 1.2);

Я пытаюсь получить координаты (x, y) четырех углов повернутого изображения, как показано на рисунке ниже (красный кружок представляет желаемый угол):

Желаемый результат

Это мой код:

stat = regionprops(Im_requete_G_scale_rot,'Extrema'); %extrema detection of the image.
point = stat.Extrema;
hold on
figure,imshow(Im_requete_G_scale_rot)
hold on
for i = 2:2:length(point)
    x = point(i,1);
    y = point(i,2);
    plot(x,y,'o');
    text(x,y,num2str(i),'color','r')
end

Но полученные координаты находятся где-то вдоль краев, а не там, где я хотел, чтобы они были, как показано на втором изображении:

Текущий, неправильный результат

Может кто-нибудь сказать, пожалуйста, что не так с этим кодом?

1 ответ

Решение

У меня нет хорошего объяснения этому, но я полагаю regionprops запутывается в оттенках серого на изображении. Если мы превратим повернутую Лену в logical массив, ваш алгоритм работает правильно:

Im_requete_G_scale_rot = logical(imresize(imrotate(Im_requete_G,-20), 1.2)); % 3rd line

Другие вопросы по тегам