Verwenden Sie MATLAB, um Segmentierungsalgorithmen basierend auf Kantenerkennung, Grenzschließung und anderen Operationen zu implementieren.

Implementieren Sie Segmentierungsalgorithmen basierend auf Kantenerkennung, Grenzschließung und anderen Operationen.

Erkennung der Grenzen verbundener Regionen:

img=imread('rice.png');
img=img>128;
imshow(img);
[m n]=size(img);

imgn=zeros(m,n);  %边界标记图像
ed=[-1 -1;0 -1;1 -1;1 0;1 1;0 1;-1 1;-1 0];  %从左上角像素,逆时针搜索
for i=2:m-1
    for j=2:n-1
        if img(i,j)==1 && imgn(i,j)==0      %当前是没标记的白色像素
            if sum(sum(img(i-1:i+1,j-1:j+1)))~=9     %块内部的白像素不标记
                ii=i;   %像素块内部搜寻使用的坐标
                jj=j;
                imgn(i,j)=2;    %本像素块第一个标记的边界,第一个边界像素为2
                
                while imgn(ii,jj)~=2    %是否沿着像素块搜寻一圈了。
                    for k=1:8      %逆时针八邻域搜索
                        tmpi=ii+ed(k,1);     %八邻域临时坐标
                        tmpj=jj+ed(k,2);
                        if img(tmpi,tmpj)==1 && imgn(tmpi,tmpj)~=2   %搜索到新边界,并且没有搜索一圈
                            ii=tmpi;     %更新内部搜寻坐标,继续搜索
                            jj=tmpj;
                            imgn(ii,jj)=1;    %边界标记图像该像素标记,普通边界为1
                            break;
                        end
                    end
                end
                
            end
        end
    end
end

figure;
imgn=imgn>=1;
imshow(imgn,[]);

%不过要是真取二值图像内边界,通常是原图减去其腐蚀图就行了
se = strel('square',3); 
imgn=img-imerode(img,se);    
figure;
imshow(imgn)

Grenzerkennung basierend auf Pixelnachbarschaften:

img=imread('rice.png');
img=img>128;
imshow(img);
[m n]=size(img);

imgn=zeros(m,n);        %边界标记图像
ed=[-1 -1;0 -1;1 -1;1 0;1 1;0 1;-1 1;-1 0]; %从左上角像素判断
for i=2:m-1
    for j=2:n-1
        if img(i,j)==1      %如果当前像素是前景像素
            
            for k=1:8
                ii=i+ed(k,1);
                jj=j+ed(k,2);
                if img(ii,jj)==0    %当前像素周围如果是背景,边界标记图像相应像素标记
                    imgn(ii,jj)=1;
                end
            end
            
        end
    end
end
    
figure;
imshow(imgn,[]);

%不过要是真取二值图像外边界,通常是原图膨胀图减去原图就行了
se = strel('square',3); 
imgn=imdilate(img,se)-img;    
figure;
imshow(imgn)

Experimentelle Ergebnisse

Für den ersten Algorithmus (Erkennung der Grenzen verbundener Regionen):

Vorteil:

  • Es kann die internen Grenzen verbundener Bereiche erkennen und liefert bessere Ergebnisse für komplexe Objektformen.
  • Durch die Verfolgung der Grenzen verbundener Regionen können genauere Grenzpositionen ermittelt werden.

Mangel:

  • Für jede verbundene Region ist eine vollständige Umgebungssuche erforderlich, sodass der Rechenaufwand hoch ist, wenn große Bilder oder Bilder mit mehreren verbundenen Regionen verarbeitet werden.
  • Der Algorithmus reagiert möglicherweise empfindlich auf Rauschen und markiert möglicherweise Rauschpunkte als Grenzen.

Verbessern:

  • Erwägen Sie das Hinzufügen eines Schwellenwerts oder anderer Strategien zum Herausfiltern kleinerer verbundener Regionen, um die Rechenkosten zu senken und die Auswirkungen von Rauschen zu verringern.
  • Sie können versuchen, schnellere Markierungsalgorithmen für verbundene Regionen zu verwenden, z. B. auf Scanlinien basierende Algorithmen oder auf Union-Find-basierte Algorithmen, um die Recheneffizienz zu verbessern.

Für den zweiten Algorithmus (auf Pixelnachbarschaft basierende Grenzerkennung):

Vorteil:

  • Die Berechnung ist relativ einfach und es ist nicht erforderlich, verbundene Bereiche zu verfolgen. Jeder Pixel muss lediglich die umgebenden Pixel überprüfen, um festzustellen, ob es sich um eine Grenze handelt.
  • Der Rechenaufwand ist gering und eignet sich für die Verarbeitung großformatiger Bilder oder Bilder mit mehreren verbundenen Regionen.

Mangel:

  • Es können nur Grenzen erkannt werden, interne Grenzinformationen verbundener Bereiche können jedoch nicht abgerufen werden.
  • Bei komplexen Objektformen ist die Grenzerkennung möglicherweise nicht genau genug.

Verbessern:

  • Sie können versuchen, komplexere Strategien zur Beurteilung der Pixelnachbarschaft zu verwenden, z. B. die Berücksichtigung eines größeren Nachbarschaftsbereichs oder die Beurteilung basierend auf Pixelwertgradienten, um die Genauigkeit der Grenzerkennung zu verbessern.
  • Kantenerkennungsalgorithmen oder Konturverfolgungsalgorithmen können kombiniert werden, um präzisere Grenzinformationen zu erhalten.

Zusammenfassend lässt sich sagen, dass beide Algorithmen ihre eigenen Vor- und Nachteile haben und je nach Anwendungsszenario der geeignete Algorithmus ausgewählt werden kann. Im Hinblick auf Verbesserungen können wir versuchen, die Recheneffizienz zu optimieren, die Genauigkeit der Grenzerkennung zu verbessern oder sie zur Verbesserung mit anderen Algorithmen zu kombinieren. Spezifische Verbesserungsrichtungen hängen von den Anwendungsanforderungen und den Leistungsanforderungen des Algorithmus ab.

Guess you like

Origin blog.csdn.net/weixin_52374973/article/details/130774198