2

Ich lerne gerade Computer Vision. Und ich bin sehr verwirrt über den Teil von Canny Kantendetektor.Könnte man in OpenCV sowohl mit einem einzelnen Graustufenbild als auch mit 3 Kanälen eines Farbbildes arbeiten?

Und wenn ich versuche ein Farbe Bild von Canny in OpenCV zu erzeugen. Ich habe ein paar Fragen.

Und hier ist der Code, den ich ausprobiert habe.

def auto_canny(image, sigma=0.33): 
    v = np.median(image) 
    lower = int(max(0, (1.0 - sigma) * v)) 
    upper = int(min(255, (1.0 + sigma) * v)) 
    edged = cv2.Canny(image, lower, upper) 

dann,

##### first situation ##### 
img = cv2.imread('mango.jpg') 
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
auto = auto_canny(gray) 
cv2.imwrite('mango_gray_edge.jpg', auto) 

in dieser Situation, ich so ein Bild bekam: enter image description here

##### second situation ##### 
img = cv2.imread('mango.jpg') 
auto = auto_canny(img) 
cv2.imwrite('mango_color_edge.jpg', auto) 

in dieser Situation bekam ich ein Bild wie folgt aus: enter image description here

und das ist die orig Inal Bild: i.stack.imgur.com/45TAU.jpg (Entschuldigung dafür, ich habe nicht genug Ruf, um mehr als 2 Links zu posten ...)

Der Unterschied zwischen der ersten und zweiten Situation ist, ob Ich konvertiere das Farbbild in ein Graustufenbild. ABER, ich habe darüber verwirrt. Weil,

In der ersten Situation, wandle ich Bild in Graustufen, so dass das Bild einkanaliges Bild ist. Und in der zweiten Situation ist das Bild immer noch drei Kanäle.

Und die Kante ist viel besser, wenn ich es nicht wie in der zweiten Situation in Graustufenbild konvertieren.

SO meine Frage ist,

1) Hat die schlaue Funktion in OpenCV Verfahren umfassen Bild umwandeln in Graustufen? Ich meine, muss ich das Bild in Graustufen konvertieren, bevor ich cv2.Canny() verwenden

2) Warum kann Canny sowohl mit einzelnen Kanal (erste Situation in Graustufen konvertieren) und drei Kanäle (Originalbild wie zweite Situation) Bild zur gleichen Zeit?

3) Wie funktioniert canny eigentlich? Könnte man direkt mit dem Farbbild umgehen ODER das Farbbild zuerst in ein Graustufenbild umwandeln?

4) Aus den Schritten von canny, wenn wir Gradienten berechnen, ich denke, es sollte Single-Channel sein, dann kann es berechnet werden. Wenn das Bild ein Farbbild mit drei Kanälen ist, wie können wir den Gradienten berechnen? Berechnen wir drei Kanäle separat? Wie funktioniert das?

Antwort

2

Ja, OpenCVs Canny-Implementierung kann mehrere Kanäle verarbeiten.

Denken Sie daran, dass OpenCV Open-Source ist, so dass Sie einfach die Implementierung überprüfen können, um diese Art von Informationen zu finden.

Im Allgemeinen was Canny tut, bevor nicht-Maxima-Unterdrückung ist die Größe (norm) des Gradienten für jedes Pixel zu berechnen, nach Sobel-Derivate (dx und dy). Wenn Sie mehr als einen Kanal haben, wie Sie sehen können in the source code, ist die Größe des Gradienten für ein bestimmtes Pixel der höchste unter allen ch Kanäle.

+0

Kann es mit Farbbildern umgehen? Wann haben sie das begangen? Mein Buch sagt, dass Canny nur mit Graustufen umgehen kann. – Rich

Verwandte Themen