Matlab обнаруживает прямоугольник из изображения

Я пытаюсь создать функцию Matlab, которая проверяет, есть ли на изображении прямоугольное поле. Прямоугольник может быть не прямым, поэтому я пытаюсь создать функцию, которая проверяет, есть ли форма прямоугольника, а позже я собираюсь использовать функцию для поворота изображения, чтобы прямоугольник был прямым.

В настоящее время я пытаюсь нарисовать линии вокруг коробки, но проблема в том, что линии слишком короткие (они не окружают всю коробку). Также мне нужны некоторые советы, которые помогли бы с этой проблемой. Я должен как-то проверить, есть ли на изображении прямоугольная рамка.

I=imread(img);
I=rgb2gray(I);

BW = edge(I, 'prewitt');
figure, imshow(BW);

[H,T,R] = hough(BW);

P  = houghpeaks(H,5,'threshold', ceil(0.3*max(H(:))))
lines = houghlines(BW,T,R,P)

figure, imshow(I), hold on

for k = 1:4
   xy = [lines(k).point1; lines(k).point2]
   plot(xy(:,1), xy(:,2), 'LineWidth', 2, 'Color','red');
end

Изображение:

введите здесь описание изображения


person M Smirth    schedule 20.11.2015    source источник
comment
Пожалуйста, предоставьте образец изображения   -  person Benoit_11    schedule 20.11.2015
comment
Изображение состоит только из этого поля? Трудно дать вам какое-либо представление, если мы не видим пример.   -  person rayryeng    schedule 20.11.2015
comment
Я добавил ссылку на изображение   -  person M Smirth    schedule 20.11.2015
comment
Взгляните на обнаружение границ   -  person TheLethalCoder    schedule 20.11.2015
comment
Это уже решено. Смотрите дубликат ссылки. Что вы можете сделать сначала, так это определить доминирующую ориентацию, вычислив обнаружение края и обнаружив наиболее заметные линии из этого изображения края с помощью преобразования Хафа. Затем вы должны определить угол наиболее выступающих линий и создать обратное вращение, чтобы сориентировать их так, чтобы они были прямыми. Оказавшись там, вы можете использовать свою логику, чтобы выяснить, есть ли на изображении прямоугольник. Удачи!   -  person rayryeng    schedule 20.11.2015
comment
Кстати, не используйте детектор Prewitt. Пожалуйста, используйте Канни. Это лучший из существующих алгоритмов автоматического обнаружения границ.   -  person rayryeng    schedule 20.11.2015