Verwenden Sie den Sobel-Operator für die Bildkantenerkennung in MATLAB

Mehak Mubarik 15 Februar 2024
Verwenden Sie den Sobel-Operator für die Bildkantenerkennung in MATLAB

Wir werden verschiedene Möglichkeiten zur Verwendung der Sobel-Methode der Kantenerkennungs-Bildverarbeitung in MATLAB betrachten. Wir werden verschiedene Beispielcodes und zugehörige Ausgaben verwenden, um Ihre Konzepte zu verdeutlichen und Ihnen einen vollständigen Einblick in die Sobel-Methode der Kantenerkennungs-Bildverarbeitungstechnik in MATLAB zu geben.

Bitte beachten Sie, dass die Kantenerkennung eine Reihe von analytischen Ansätzen umfasst, um Grenzen und Konturen in einem computerisierten Bild zu finden, wo die Bildintensität abrupt variiert oder, genauer gesagt, Diskontinuitäten enthält.

Die Stufenerkennung identifiziert Diskontinuitäten in eindimensionalen Signalen, während die Änderungserkennung Signalunregelmäßigkeiten identifiziert.

Die Kantenerkennung ist eine leistungsstarke Technik in der visuellen Analyse, der maschinellen Bildverarbeitung und der Objekterkennung, insbesondere bei der Objekterkennung und -trennung. Sobel-, Canny-, Prewitt-, Roberts- und Fuzzy-Logik-Ansätze sind herausragende Kantenerkennungstechniken.

Verwenden Sie den Sobel-Operator From Scratch für die Bildkantenerkennung in MATLAB

Der Sobel-Operator, auch bekannt als Sobel–Feldman-Operator oder Sobel-Filter, kann in der Bild- und Videoverarbeitung eingesetzt werden, insbesondere in Kantenerkennungstechniken. Es erzeugt ein Bild, das Kanten hervorhebt.

Es wurde zu Ehren der Mitarbeiter des Stanford Artificial Intelligence Laboratory, Irwin Sobel und Gary Feldman (SAIL), benannt. 1968 stellten Sobel & Feldman bei SAIL das Konzept eines isotropen 3x3-Bildgradientenoperators vor.

Ein diskreter Differenzierungsoperator berechnet einen ungefähren Gradienten der Bildintensitätskurve. Die Sobel–Feldman-Operation erzeugt an jeder Stelle im Bild den passenden Gradientenvektor oder die Normale dieses Vektors.

Der Sobel–Feldman-Operator basiert auf der Faltung des Bildes in horizontaler und vertikaler Richtung mit einem winzigen, trennbaren, ganzzahligen Filter und ist daher rechengünstig. Allerdings ist die erzeugte Gradientennäherung extrem schlecht, insbesondere für hochfrequente Schwankungen im Bild.

Lassen Sie uns dieses Konzept verstehen, indem wir uns das folgende Beispiel ansehen.

Beispielcode:

Aimage=imread('peppers.png');
imshow(Aimage)
Bimage=rgb2gray(Aimage);

Cimage=double(Bimage);

for k=1:size(Cimage,1)-2
for l=1:size(Cimage,2)-2
%Sobel mask for x-direction:
G_x=((2*Cimage(k+2,l+1)+Cimage(k+2,l)+Cimage(k+2,l+2))-(2*Cimage(k,l+1)+Cimage(k,l)+Cimage(k,l+2)));
%Sobel mask for y-direction:
G_y=((2*Cimage(k+1,l+2)+Cimage(k,l+2)+Cimage(k+2,l+2))-(2*Cimage(k+1,l)+Cimage(k,l)+Cimage(k+2,l)));
%The gradient of the image
%B(i,j)=abs(Gx)+abs(Gy);
Bimage(k,l)=sqrt(G_x.^2+G_y.^2);
end
end
figure,
imshow(Bimage);
title('Sobel gradient Image');

Ausgang:

Sobelbild 1

Sobelbild 2

Das kantenerkannte Bild kann aus dem Sobel-Gradienten unter Verwendung einer Abschneide-/Schwellenwerteinstellung erhalten werden. Stattdessen wird das Schwellenniveau angewendet, wenn die Sobel-Gradientenanteile kleiner als das Kriteriumsniveau sind.

Wenn f gleich der kritischen Schwelle ist, entspricht f dem vordefinierten Cutoff.

Beispielcode:

Aimage=imread('peppers.png');
imshow(Aimage)
Bimage=rgb2gray(Aimage);

Cimage=double(Bimage);

for k=1:size(Cimage,1)-2
for l=1:size(Cimage,2)-2
%Sobel mask for x-direction:
G_x=((2*Cimage(k+2,l+1)+Cimage(k+2,l)+Cimage(k+2,l+2))-(2*Cimage(k,l+1)+Cimage(k,l)+Cimage(k,l+2)));
%Sobel mask for y-direction:
G_y=((2*Cimage(k+1,l+2)+Cimage(k,l+2)+Cimage(k+2,l+2))-(2*Cimage(k+1,l)+Cimage(k,l)+Cimage(k+2,l)));
%The gradient of the image
%B(i,j)=abs(Gx)+abs(Gy);
Bimage(k,l)=sqrt(G_x.^2+G_y.^2);
end
end
figure,
imshow(Bimage);
title('Sobel gradient Image');

%Define a threshold value
Thresholdd=100;
Bimage=max(Bimage,Thresholdd);
Bimage(Bimage==round(Thresholdd))=0;

Bimage=uint8(Bimage);
figure,
imshow(Bimage);
title('Edge detected Image');

Hier stellt sich die Frage, warum wir bei i=1:size (C,1) -2 und j=1:size (C,2) -2 2 subtrahiert haben. Dies liegt daran, dass von jeder (i,j)-ten Stelle ein 3x3-Rahmen erzeugt wird.

Indem wir 2 entfernen, können wir die Zahl innerhalb ihrer Grenzen halten. Diese Grenze ergibt sich aus der Faltung der horizontalen 3x3-Maske Sobel mit der Bildmatrix unter der Annahme, dass wir das Element C(i,j) aus der Quellbildmatrix betrachten.

Um die entsprechende Komponente in der Gx-Matrix Gx(i,j) zu erhalten, wählen wir die 8 Nachbarn um die Elemente C(i,j) und C(i,j) aus und multiplizieren sie jeweils sie durch das entsprechende Element der Sobel-Maske und addieren die Ergebnisse: C(i-1,j-1) * S(1,1)+C(i-1,j) * S(1,2) * C(i-1,j+1) * S(1,3)+.. (9 Multiplikationen hier).

Ausgang:

Sobelbild 1

Sobelbild 2

Sobel-Bild 3

Mehak Mubarik avatar Mehak Mubarik avatar

Mehak is an electrical engineer, a technical content writer, a team collaborator and a digital marketing enthusiast. She loves sketching and playing table tennis. Nature is what attracts her the most.

LinkedIn

Verwandter Artikel - MATLAB Operator