Ich versuche, die Eckpunkte von einem Standbild mit GPUImageHarrisCornerDetectionFilter
zu bekommen.Wie bekomme ich Ecken mit GPUImageHarrisCornerDetectionFilter
Ich habe am Beispielcode aus dem Projekt sah, habe ich in der Dokumentation sah, und ich habe auf diesem Posten sah, die über die gleiche Sache ist: GPUImage Harris Corner Detection on an existing UIImage gives a black screen output
Aber ich kann es nicht machen - und es fällt mir schwer zu verstehen, wie das mit Standbildern funktionieren soll.
Was ich an dieser Stelle haben, ist dies:
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
}
Diese Funktion gibt immer []
so ist es offensichtlich nicht funktioniert.
Ein interessantes Detail - ich habe das FilterShowcaseSwift-Projekt aus GPUImage-Beispielen zusammengestellt, und der Filter findet keine klaren Ecken, wie auf einem Blatt Papier auf schwarzem Hintergrund.
Da es keine klaren Ecken gibt, ist der Harris-Eckendetektor nicht skaleninvariant. Je höher die Auflösung des Bildes, desto schärfer wird es aussehen. Die 'blurRadiusInPixels',' sensitivity' und 'threshold' können mit einer bestimmten Auflösung optimiert werden, um mehr oder weniger Ecken herauszuziehen. Sie können aber auch experimentieren, indem Sie die Auflösung der Bilder verringern, damit sie größer werden. Ecken skalieren. Die aktuelle Implementierung ist ebenfalls auf maximal 256 Ecken beschränkt. Wenn also alle oben links im Bild erkannt werden, wird nichts mehr gemeldet. –