Ecken- und Blob-Erkennung
Eckenerkennung
Die Eckenerkennung wird verwendet, um starke Intensitätsänderungen zu identifizieren, an denen sich zwei Kanten treffen. Sie unterstützt das Feature-Matching, das Objekt-Tracking und die Strukturerkennung.
Gängige Methoden:
- Harris-Eckendetektor (
cv2.cornerHarris
): erkennt Ecken basierend auf Gradientenänderungen;
# Load image and convert to grayscale
image = cv2.imread("image.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Convert to float32
gray = np.float32(gray)
# Apply Harris Corner Detection
harris_corners = cv2.cornerHarris(gray, blockSize=2, ksize=3, k=0.04)
harris_corners = cv2.dilate(harris_corners, None) # Improve visibility
# Mark detected corners in red
image[harris_corners > 0.01 * harris_corners.max()] = [0, 0, 255]
Parameter:
src
: Eingabebild in Graustufen (mussfloat32
sein);blockSize
: Größe des lokalen Fensters zur Gradientenberechnung;ksize
: Aperturgröße des Sobel-Operators (ungerade Zahl, z. B.3
,5
,7
);k
: Freier Parameter des Harris-Detektors (typische Werte:0.04 - 0.06
).
- Shi-Tomasi-Eckendetektor (
cv2.goodFeaturesToTrack
): wählt die stärksten Ecken in einem Bild aus;
# Load image and convert to grayscale
image = cv2.imread("image.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Detect corners
corners = cv2.goodFeaturesToTrack(gray, maxCorners=100, qualityLevel=0.01, minDistance=10)
# Draw detected corners in blue
for corner in corners:
x, y = np.int32(corner[0])
cv2.circle(image, (x, y), 5, (255, 0, 0), -1)
Parameter:
image
: Eingabebild in Graustufen;maxCorners
: maximale Anzahl zu erkennender Ecken;qualityLevel
: Mindestqualität der erkannten Ecken (Bereich:0.01 - 0.1
);minDistance
: Mindestabstand zwischen erkannten Ecken.
Parameter der Methode cv2.circle()
zum Hervorheben von Objekten:
image
: das Bild, auf dem der Kreis gezeichnet werden soll;center_coordinates
: die Mittelpunktkoordinaten des Kreises, dargestellt als Tupel mit zwei Werten: (X, Y);radius
: der Radius des Kreises;color
: die Farbe des Kreisrandes. Im BGR-Format, übergeben als Tupel (z. B.(255, 0, 0)
für Blau);thickness
: die Dicke des Kreisrandes in Pixel. Ein Wert von-1
füllt den gesamten Kreis mit der angegebenen Farbe aus.
Blob-Erkennung
Die Blob-Erkennung findet Regionen mit ähnlicher Intensität in einem Bild und ist nützlich für Objekt-Erkennung und -Verfolgung.
Eine der gängigen Methoden zur Blob-Erkennung ist der SimpleBlobDetector
cv2.SimpleBlobDetector
: erkennt Keypoints, die Blobs anhand von Größe, Form und Intensität repräsentieren.
# Set up SimpleBlobDetector parameters
params = cv2.SimpleBlobDetector_Params()
# Adjust parameters for better detection
params.minThreshold = 5
params.maxThreshold = 255
params.filterByArea = True
params.minArea = 100
params.maxArea = 5000
params.filterByCircularity = True
params.minCircularity = 0.02
params.filterByConvexity = True
params.minConvexity = 0.5
params.filterByInertia = True
params.minInertiaRatio = 0.001
# Create detector and detect blobs
detector = cv2.SimpleBlobDetector_create(params)
keypoints = detector.detect(gray)
# Draw blobs on the image
image_with_blobs = cv2.drawKeypoints(image, keypoints, None, (0, 255, 0),
cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
Parameter:
minThreshold
,maxThreshold
: Intensitätsbereich für die Blob-Erkennung;filterByArea
: Aktiviert das Filtern basierend auf der Blob-Größe;minArea
,maxArea
: Gibt die Größenbeschränkungen für erkannte Blobs an;
filterByCircularity
: Aktiviert das Filtern basierend auf der Rundheit;minCircularity
: Niedrigere Werte erkennen längliche Blobs;
filterByConvexity
: Aktiviert das Filtern basierend auf der Konvexität;minConvexity
: Niedrigere Werte erlauben konkave Formen;
filterByInertia
: Aktiviert das Filtern basierend auf der Streckung;minInertiaRatio
: Niedrigere Werte erkennen längliche Blobs.
Swipe to start coding
Sie erhalten die Bilder einer Fabrik (factory
) und von Sonnenblumen (sunflowers
):
- Konvertieren Sie das Bild
factory
in Graustufen und speichern Sie es in der Variablegray_factory
; - Konvertieren Sie das Bild
sunflowers
in Graustufen und speichern Sie es in der Variablegray_sunflowers
; - Für den Harris-Detektor muss die Bildmatrix in
float32
umgewandelt werden; führen Sie dies durch und speichern Sie das Ergebnis ingray_float
; - Wenden Sie die Harris-Eckendetektion an und speichern Sie das Ergebnis in
harris_corners
(empfohlene Parameter:blockSize=2, ksize=3, k=0.04
); - Verwenden Sie
dilate()
, um die Sichtbarkeit derharris_corners
zu verbessern; - Wenden Sie die Shi-Tomasi-Eckendetektion auf das Bild an und speichern Sie das Ergebnis in
shi_tomasi_corners
(empfohlene Parameter:gray_factory, maxCorners=100, qualityLevel=0.01, minDistance=10
) - Erstellen Sie ein
SimpleBlobDetector_Params
-Objekt, um die Parameter zu initialisieren, und speichern Sie es inparams
; - Erstellen Sie einen Blob-Detektor mit den angegebenen Parametern und speichern Sie ihn in
detector
; - Erkennen Sie Blob-Keypoints und speichern Sie diese in
keypoints
.
Lösung
Danke für Ihr Feedback!
single
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Can you explain the difference between Harris and Shi-Tomasi corner detectors?
How do I choose between corner detection and blob detection for my application?
Can you provide more details on tuning the parameters for SimpleBlobDetector?
Awesome!
Completion rate improved to 3.45
Ecken- und Blob-Erkennung
Swipe um das Menü anzuzeigen
Eckenerkennung
Die Eckenerkennung wird verwendet, um starke Intensitätsänderungen zu identifizieren, an denen sich zwei Kanten treffen. Sie unterstützt das Feature-Matching, das Objekt-Tracking und die Strukturerkennung.
Gängige Methoden:
- Harris-Eckendetektor (
cv2.cornerHarris
): erkennt Ecken basierend auf Gradientenänderungen;
# Load image and convert to grayscale
image = cv2.imread("image.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Convert to float32
gray = np.float32(gray)
# Apply Harris Corner Detection
harris_corners = cv2.cornerHarris(gray, blockSize=2, ksize=3, k=0.04)
harris_corners = cv2.dilate(harris_corners, None) # Improve visibility
# Mark detected corners in red
image[harris_corners > 0.01 * harris_corners.max()] = [0, 0, 255]
Parameter:
src
: Eingabebild in Graustufen (mussfloat32
sein);blockSize
: Größe des lokalen Fensters zur Gradientenberechnung;ksize
: Aperturgröße des Sobel-Operators (ungerade Zahl, z. B.3
,5
,7
);k
: Freier Parameter des Harris-Detektors (typische Werte:0.04 - 0.06
).
- Shi-Tomasi-Eckendetektor (
cv2.goodFeaturesToTrack
): wählt die stärksten Ecken in einem Bild aus;
# Load image and convert to grayscale
image = cv2.imread("image.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Detect corners
corners = cv2.goodFeaturesToTrack(gray, maxCorners=100, qualityLevel=0.01, minDistance=10)
# Draw detected corners in blue
for corner in corners:
x, y = np.int32(corner[0])
cv2.circle(image, (x, y), 5, (255, 0, 0), -1)
Parameter:
image
: Eingabebild in Graustufen;maxCorners
: maximale Anzahl zu erkennender Ecken;qualityLevel
: Mindestqualität der erkannten Ecken (Bereich:0.01 - 0.1
);minDistance
: Mindestabstand zwischen erkannten Ecken.
Parameter der Methode cv2.circle()
zum Hervorheben von Objekten:
image
: das Bild, auf dem der Kreis gezeichnet werden soll;center_coordinates
: die Mittelpunktkoordinaten des Kreises, dargestellt als Tupel mit zwei Werten: (X, Y);radius
: der Radius des Kreises;color
: die Farbe des Kreisrandes. Im BGR-Format, übergeben als Tupel (z. B.(255, 0, 0)
für Blau);thickness
: die Dicke des Kreisrandes in Pixel. Ein Wert von-1
füllt den gesamten Kreis mit der angegebenen Farbe aus.
Blob-Erkennung
Die Blob-Erkennung findet Regionen mit ähnlicher Intensität in einem Bild und ist nützlich für Objekt-Erkennung und -Verfolgung.
Eine der gängigen Methoden zur Blob-Erkennung ist der SimpleBlobDetector
cv2.SimpleBlobDetector
: erkennt Keypoints, die Blobs anhand von Größe, Form und Intensität repräsentieren.
# Set up SimpleBlobDetector parameters
params = cv2.SimpleBlobDetector_Params()
# Adjust parameters for better detection
params.minThreshold = 5
params.maxThreshold = 255
params.filterByArea = True
params.minArea = 100
params.maxArea = 5000
params.filterByCircularity = True
params.minCircularity = 0.02
params.filterByConvexity = True
params.minConvexity = 0.5
params.filterByInertia = True
params.minInertiaRatio = 0.001
# Create detector and detect blobs
detector = cv2.SimpleBlobDetector_create(params)
keypoints = detector.detect(gray)
# Draw blobs on the image
image_with_blobs = cv2.drawKeypoints(image, keypoints, None, (0, 255, 0),
cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
Parameter:
minThreshold
,maxThreshold
: Intensitätsbereich für die Blob-Erkennung;filterByArea
: Aktiviert das Filtern basierend auf der Blob-Größe;minArea
,maxArea
: Gibt die Größenbeschränkungen für erkannte Blobs an;
filterByCircularity
: Aktiviert das Filtern basierend auf der Rundheit;minCircularity
: Niedrigere Werte erkennen längliche Blobs;
filterByConvexity
: Aktiviert das Filtern basierend auf der Konvexität;minConvexity
: Niedrigere Werte erlauben konkave Formen;
filterByInertia
: Aktiviert das Filtern basierend auf der Streckung;minInertiaRatio
: Niedrigere Werte erkennen längliche Blobs.
Swipe to start coding
Sie erhalten die Bilder einer Fabrik (factory
) und von Sonnenblumen (sunflowers
):
- Konvertieren Sie das Bild
factory
in Graustufen und speichern Sie es in der Variablegray_factory
; - Konvertieren Sie das Bild
sunflowers
in Graustufen und speichern Sie es in der Variablegray_sunflowers
; - Für den Harris-Detektor muss die Bildmatrix in
float32
umgewandelt werden; führen Sie dies durch und speichern Sie das Ergebnis ingray_float
; - Wenden Sie die Harris-Eckendetektion an und speichern Sie das Ergebnis in
harris_corners
(empfohlene Parameter:blockSize=2, ksize=3, k=0.04
); - Verwenden Sie
dilate()
, um die Sichtbarkeit derharris_corners
zu verbessern; - Wenden Sie die Shi-Tomasi-Eckendetektion auf das Bild an und speichern Sie das Ergebnis in
shi_tomasi_corners
(empfohlene Parameter:gray_factory, maxCorners=100, qualityLevel=0.01, minDistance=10
) - Erstellen Sie ein
SimpleBlobDetector_Params
-Objekt, um die Parameter zu initialisieren, und speichern Sie es inparams
; - Erstellen Sie einen Blob-Detektor mit den angegebenen Parametern und speichern Sie ihn in
detector
; - Erkennen Sie Blob-Keypoints und speichern Sie diese in
keypoints
.
Lösung
Danke für Ihr Feedback!
single