Sto cercando di ottenere i punti d'angolo da un'immagine fissa utilizzando GPUImageHarrisCornerDetectionFilter
.Come ottenere gli angoli utilizzando GPUImageHarrisCornerDetectionFilter
ho guardato il codice di esempio dal progetto, ho guardato la documentazione, e ho guardato questo post che è circa la stessa cosa: GPUImage Harris Corner Detection on an existing UIImage gives a black screen output
ma non riesco a farlo funzionare - e ho difficoltà a capire come questo dovrebbe funzionare con le immagini fisse.
Quello che ho a questo punto è questo:
func harrisCorners() -> [CGPoint] {
var points = [CGPoint]()
let stillImageSource: GPUImagePicture = GPUImagePicture(image: self.image)
let filter = GPUImageHarrisCornerDetectionFilter()
filter.cornersDetectedBlock = { (cornerArray:UnsafeMutablePointer<GLfloat>, cornersDetected:UInt, frameTime:CMTime) in
for index in 0..<Int(cornersDetected) {
points.append(CGPoint(x:CGFloat(cornerArray[index * 2]), y:CGFloat(cornerArray[(index * 2) + 1])))
}
}
filter.forceProcessingAtSize(self.image.size)
stillImageSource.addTarget(filter)
stillImageSource.processImage()
return points
}
Questa funzione restituisce sempre []
quindi ovviamente non funziona.
Un dettaglio interessante: ho compilato il progetto FilterShowcaseSwift dagli esempi GPUImage e il filtro non riesce a trovare angoli molto chiari, come su un foglio di carta su uno sfondo nero.
Per quanto riguarda la mancanza di angoli chiari, il rilevatore di angoli Harris non è invariante rispetto alla scala, quindi la risoluzione più alta dell'immagine, più angolato sarà l'angolo che cercherà. 'BlurRadiusInPixels',' sensitivity' e 'threshold' possono essere ottimizzati ad una data risoluzione per tirare fuori più o meno angoli, ma puoi anche sperimentare con l'abbassamento della risoluzione delle immagini che entrano nel rivelatore per farle raccogliere più grandi- angoli della scala. L'implementazione corrente è limitata ad un massimo di 256 angoli, quindi se tutti questi sono rilevati nella parte in alto a sinistra dell'immagine, non verranno più riportati. –