Sektion 2. Kapitel 8
single
Hjørne- og Blobdetektion
Stryg for at vise menuen
Hjørnedetektion
Hjørnedetektion bruges til at identificere skarpe ændringer i intensitet, hvor to kanter mødes. Det anvendes til feature matching, objektsporing og strukturgenkendelse.
Populære metoder:
- Harris-hjørnedetektor (
cv2.cornerHarris): detekterer hjørner baseret på gradientændringer;
# 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]
Bemærk
Parametre:
src: input gråtonebillede (skal værefloat32);blockSize: størrelse på det lokale vindue til beregning af gradienter;ksize: aperturstørrelse for Sobel-operatoren (ulige, f.eks.3,5,7);k: Harris-detektorens frie parameter (typiske værdier:0.04 - 0.06).
- Shi-Tomasi-hjørnedetektor (
cv2.goodFeaturesToTrack): vælger de stærkeste hjørner i et billede;
# 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)
Bemærk
Parametre:
image: input gråtonebillede;maxCorners: maksimalt antal hjørner der skal detekteres;qualityLevel: minimumskvalitet for detekterede hjørner (interval:0.01 - 0.1);minDistance: minimumsafstand mellem detekterede hjørner.
Læs Mere
Parametre for cv2.circle()-metoden til fremhævning af objekter:
image: billedet, hvorpå cirklen skal tegnes;center_coordinates: centrumkoordinaterne for cirklen, repræsenteret som et tuple med to værdier: (X, Y);radius: cirklens radius;color: farven på cirklens kant. I BGR-format, angivet som et tuple (f.eks.(255, 0, 0)for blå);thickness: tykkelsen på cirklens kant i pixels. En værdi på-1udfylder hele cirklen med den angivne farve.
Blobdetektion
Blobdetektion finder områder med ensartet intensitet i et billede, hvilket er nyttigt til objektdetektion og -sporing.
En af de populære metoder til blobdetektion er SimpleBlobDetector
cv2.SimpleBlobDetector: detekterer nøglepunkter, der repræsenterer blobs baseret på størrelse, form og intensitet.
# 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)
Bemærk
Parametre:
minThreshold,maxThreshold: intensitetsinterval for blob-detektion;filterByArea: aktiverer filtrering baseret på blob-størrelse;minArea,maxArea: angiver størrelsesbegrænsninger for detekterede blobs;
filterByCircularity: aktiverer filtrering baseret på rundhed;minCircularity: lavere værdier detekterer aflange blobs;
filterByConvexity: aktiverer filtrering baseret på konveksitet;minConvexity: lavere værdier tillader konkave former;
filterByInertia: aktiverer filtrering baseret på aflanghed;minInertiaRatio: lavere værdier detekterer aflange blobs.
Opgave
Swipe to start coding
Du får billederne af fabrikken (factory) og solsikkerne (sunflowers):
- Konverter
factory-billedet til gråtoner og gem det i variablengray_factory; - Konverter
sunflowers-billedet til gråtoner og gem det i variablengray_sunflowers; - Det er nødvendigt for Harris Detector at konvertere billedmatricen til
float32, gør dette og gem igray_float; - Anvend Harris hjørnedetektion og gem resultatet i
harris_corners(anbefalede parametre:blockSize=2, ksize=3, k=0.04); - Brug
dilate()for at forbedre synligheden afharris_corners; - Anvend Shi-Tomasi hjørnedetektion på billedet og gem resultatet i
shi_tomasi_corners(anbefalede parametre:gray_factory, maxCorners=100, qualityLevel=0.01, minDistance=10) - Opret et
SimpleBlobDetector_Params-objekt for at initialisere parametrene og gem det iparams; - Opret en blobdetektor med de angivne parametre og gem den i
detector; - Detekter blob-nøglepunkter og gem dem i
keypoints.
Løsning
Var alt klart?
Tak for dine kommentarer!
Sektion 2. Kapitel 8
single
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat