Я пытаюсь использовать douglas-peucker
алгоритм, чтобы упростить мой подключен components.I получить мои связные компоненты, используя bwlabel
и я посылаю его к douglas
algorithm.Here является звеном алгоритма, который я являюсь using- Douglas-Peucker Algorithm matlabлиния Упрощение обработки изображений
Вот мой код-
clc;
image=imread('mmm1.jpg');
image = im2bw(image);
[imx imy]=size(image);
n1=zeros(imx,imy);
I=zeros(imx,imy);
L = bwlabel(image,8) ;%Calculating connected components
[r,c] = find(L==1); %Using 1st connected component
n1=zeros(imx,imy);
rc = [r c];
[ps mm] = dpsimplify(rc,1); %Douglas-Peucker algorithm
%To display original component
%___________________________________________________________________
[sx sy]=size(rc);
for j=1:sx
x1=rc(j,1);
y1=rc(j,2);
n1(x1,y1)=1;
end
figure,imshow(n1);
%___________________________________________________________________
%To display component after simplification
n1=zeros(imx,imy);
[sx sy]=size(mm);
for j=1:sx
x1=rc(j,1);
y1=rc(j,2);
n1(x1,y1)=1;
end
figure,imshow(n1);
Это был мой первоначальный вход image-
Это был мой 1st
компонент, к которому я обратился Douglas-Peucker
algorithm-
Это было результатом algorithm-
Код Дугласа Peucker можно найти в ссылке я уже упоминал выше. Итак, Мой вопрос: Почему упрощение не происходит для всего компонента? Как я могу это исправить?
Я думаю, потому что вам нужны точки или линии, которые описывают «линию», а не пиксели. Сначала попробуйте получить скелет вашего изображения. https://uk.mathworks.com/help/images/ref/bwmorph.html –
PD: Почему вы хотите упростить эти строки? Что вы ожидаете? Они так же просто, как они могут получить. –
@AnderBiguri Это связано с тем, что когда я запускаю алгоритм определения угла, многие из наклонных линий на этом изображении, которые недостаточно упрощены, они дают неправильный результат. Обнаружение бордера не запускается на этих изображениях, поскольку оно обнаруживает слишком много угловых точек. – Noober