Sektion 1. Kapitel 11
single
Hjørne- og Blobdetektion
Stryg for at vise menuen
Hjørnedetektion
Hjørnedetektion anvendes 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: fri parameter for Harris-detektoren (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 af cirklens kant i pixels. En værdi på-1udfylder hele cirklen med den angivne farve.
Blobdetektion
Blobdetektion identificerer 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 blobdetektion;filterByArea: aktiverer filtrering baseret på blobstø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 en fabrik (factory) og solsikker (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 corner detection og gem resultatet i
harris_corners(anbefalede parametreblockSize=2, ksize=3, k=0.04); - Brug
dilate()for at forbedre synligheden afharris_corners; - Anvend Shi-Tomasi corner detection på billedet og gem resultatet i
shi_tomasi_corners(anbefalede parametregray_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 specificerede parametre og gem den i
detector; - Detektér blob-nøglepunkter og gem dem i
keypoints.
Løsning
Var alt klart?
Tak for dine kommentarer!
Sektion 1. Kapitel 11
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