giovedì 17 agosto 2023

Subpixel corner detection con Opencv

Ho provato a vedere se la funzione di  corner detection poteva essere utile con gli aruco tags per vedere se vi erano spostamenti


Non sembra ma quella sopra e' una gif animata (187 frames)

Ho preso l'esempio della libreria OpenCV applicato ad una serie di immagini di un Aruco tag statico ripreso con differenti condizioni di illuminazione

from __future__ import print_function
import cv2 as cv
import numpy as np
import argparse
import random as rng

source_window = 'Image'
maxTrackbar = 25
rng.seed(12345)

def goodFeaturesToTrack_Demo(val):
maxCorners = max(val, 1)
# Parameters for Shi-Tomasi algorithm
qualityLevel = 0.01
minDistance = 10
blockSize = 3
gradientSize = 3
useHarrisDetector = False
k = 0.04
# Copy the source image
copy = np.copy(src)
# Apply corner detection
corners = cv.goodFeaturesToTrack(src_gray, maxCorners, qualityLevel, minDistance, None, blockSize=blockSize, gradientSize=gradientSize, useHarrisDetector=useHarrisDetector, k=k)
# Draw corners detected
radius = 4
winSize = (5, 5)
zeroZone = (-1, -1)
criteria = (cv.TERM_CRITERIA_EPS + cv.TermCriteria_COUNT, 40, 0.001)
# Calculate the refined corner locations
corners = cv.cornerSubPix(src_gray, corners, winSize, zeroZone, criteria)
# Write them down
for i in range(corners.shape[0]):
print(corners[i,0,0],";",corners[i,0,1],";",end='')
parser = argparse.ArgumentParser(description='Code for Shi-Tomasi corner detector tutorial.')
parser.add_argument('--input', help='Path to input image.', default='pic3.png')
args = parser.parse_args()
src = cv.imread(cv.samples.findFile(args.input))
if src is None:
print('Could not open or find the image:', args.input)
exit(0)
src_gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
maxCorners = 10 # initial threshold
goodFeaturesToTrack_Demo(maxCorners)
print()


il risultato dell'algotitmo e' di questo tipo




Alla fine e' emerso l'algoritmo seleziona in modo automatico gli angoli con un ordine diverso  e c'e' una forte influenza dell'illuminazione sulla definizione delle coordinate dell'angolo 

In casi ottimali (ma non e' questo il caso) ho visto che la standard deviation e' di circa 0.2 pixels

Non e' quindi un metodo affidabile per il change detection








Nessun commento:

Posta un commento

ESP32-2432S028R e LVGL

La scheda ESP32-2432S028R monta un Esp Dev Module con uno schermo TFT a driver ILI9341 di 320x240 pixels 16 bit colore.Il sito di riferiment...