2016-03-09 1 views
5

Ich möchte Gradient des Bildes I berechnen, ich habe zwei Optionen, dieWas ist der Unterschied zwischen Gradient und Imgradient?

[Gx, Gy] = gradient(I); 
g = sqrt(Gx.^2+Gy.^2); 

und

[g,~] = imgradient(I, 'sobel'); 

Meine Frage

  1. Was ersten Gradienten-Methode bewertet werden, werden in ist Möglichkeit?

  2. Was ist mit der Suche nach einem Gradienten mithilfe der sobel-Methode?

danken alle

Dies ist, was habe ich versucht,

I=zeros([128 128]); 
I(50:100,50:100)=100; 
[Gx, Gy] = gradient(I); 
g1 = sqrt(Gx.^2+Gy.^2); 
[g2,~] = imgradient(I, 'sobel'); 
subplot(121);imshow(g1,[]);title('First option') 
subplot(122);imshow(g2,[]);title('Second option') 

enter image description here

Wenn laut Bild hinzugefügt wird, wird die andere freiere

I=zeros([128 128]); 
I(50:100,50:100)=100; 
%% Add noise image; 
noiseStd=5; 
I_noise = I + (noiseStd * randn([128, 128])); 
[Gx, Gy] = gradient(I_noise); 
g1 = sqrt(Gx.^2+Gy.^2); 
[g2,~] = imgradient(I_noise, 'sobel'); 
subplot(121);imshow(g1,[]);title('First option') 
subplot(122);imshow(g2,[]);title('Second option') 

enter image description here

als Visualisierungs, sofern die zweite Option mehr Helligkeitswert

+1

Haben Sie versucht, zu vergleichen? Der amin Unterschied ist, dass man in einer Toolbox für Bilder kommt, der andere funktioniert für jede Oberfläche –

+0

Ja. Ich habe es aktualisiert. Bitte sehen Sie meine aktualisierte Frage – Jame

+0

Hallo! überlege, eine Antwort als gültig zu akzeptieren –

Antwort

8

Der Unterschied ist der ‚Sobel‘ Betreiber der Tat. Der Sobel-Operator ist eine Matrix, die mit dem Bild verschachtelt ist, um ihre Richtungsgradienten zu berechnen.

Der Sobel-Operator wird als (aus Wikipedia) definiert:

enter image description here

während das, was gradient tut nur Richtungsdifferenzen ist. Sie können dies als Gradient interpretieren

Gx=[ 0 0 0;    Gx=[ 0 -1 0; 
    -1 0 1;   and   0 0 0; 
    0 0 0]      0 1 0]; 

Dieser Unterschied machen, ist, weil, wenn man ein Bild hat, wird wissen, dass es sich um eine Diskretisierung einer kontinuierlichen Domäne ist. Der Sobel-Operator hilft dabei, Dinge zu berücksichtigen, die "um" das gegebene Pixel herum passieren.

+0

Also, wenn ich nur den Gradienten ohne seine Richtung als meinen obigen Code betrachte. Was unterscheidet diese zwei Gradienten? – Jame

+0

@ user8430 'imgradient' gibt nur' sqrt (Gx^2 + Gy^2) 'als Ausgabe, während' gradient' Sie getrennt gibt. nur das. –

+0

Aus meinem Ergebnis wird klar, dass die zentrale Differenzmethode zu mehr Rauschen führt als die Sobel-Methode. Im Vergleich zur zentralen Differenzmethode erreicht die Sobel-Methode somit eine bessere Rauschunterdrückung, indem ein anderer Kernel mit bestimmten Koeffizienten verwendet wird. Stimmst du mir zu? – Jame

8

gradient verwendet ausschließlich zentrale Unterschiede und imgradient gibt Ihnen die Wahl, z. 'central' als auch oder die Standardeinstellung 'sobel'.Mit der ersten Option imgradient sieht genauso aus wie gradient:

I=zeros([128 128]); 
I(50:100,50:100)=100; 
%% Add noise image; 
noiseStd=5; 
I_noise = I + (noiseStd * randn([128, 128])); 
[Gx, Gy] = gradient(I_noise); 
g1 = sqrt(Gx.^2+Gy.^2); 
[g2,~] = imgradient(I_noise, 'sobel'); 
[g3,~] = imgradient(I_noise, 'central'); 
subplot(131);imshow(g1,[]);title('gradient') 
subplot(132);imshow(g2,[]);title('imgradient sobel') 
subplot(133);imshow(g3,[]);title('imgradient central') 

enter image description here


Für imgradient gibt es fünf Optionen zur Verfügung:

  • 'Sobel' Sobel Gradientenoperators (default)
  • 'Prewitt' Prewitt Gradientenoperator
  • 'zentral' Zentraler Differenzgradient: dI/dx = (I (x + 1) - I (x-1))/2
  • 'intermediate'intermediärer Differenzgradient: dI/dx = I (x + 1) - I (x)
  • 'Robert Robert Gradientenoperator

Während die Dokumentation explaines:

der algorithmische Ansatz in imgradient für jede der aufgelisteten Gradientenverfahren genommen ist, zuerst compute direktionalen Gradienten, Gx und Gy, in Bezug auf die x-Achse und y-Achse. Die X-Achse ist entlang der Spalten definiert, die nach rechts gehen, und die Y-Achse ist entlang der Zeilen definiert, die nach unten gehen. Die Gradientengröße und -richtung werden dann aus ihren orthogonalen Komponenten Gx und Gy berechnet.

+0

Vielen Dank für Ihr Beispiel für den zentralen Unterschied. Also, was ist mit dem Sobel-Operator los? Wie Ferkel gesagt hat, sorgt es für ein ruhigeres Bild. – Jame

+0

@ user8430 Die Antwort würde hinter dem Umfang von StackOverflow stehen, und ich weiß es eigentlich nicht. Sie müssen die einzelnen Algorithmen untersuchen. – thewaywewalk