GPUImageHarrisCornerDetectionFilter
を使用して静止画からコーナーポイントを取得しようとしています。GPUImageHarrisCornerDetectionFilterを使用してコーナーを取得する方法
私はプロジェクトからのコード例を見てきた、私はマニュアルを見てきた、と私は同じことをされ、この記事を見てきました: GPUImage Harris Corner Detection on an existing UIImage gives a black screen output
しかし、私はそれを動作させることができません私は、これが静止画像でどのように動作するのかを理解するのに苦労しています。
私はこの時点で持っていることは、このされています
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
}
この関数は常に[]
を返すので、それは明らかに働いていません。
興味深い詳細 - 私はGPUImageの例からFilterShowcaseSwiftプロジェクトをコンパイルしました。フィルターは黒い背景の紙のように非常に鮮明なコーナーを見つけることができません。
明確なコーナーが見つからないことに関して、Harrisコーナー検出器はスケール不変ではないため、画像が高解像度であるほど、より鮮明なコーナーが検索されます。 'blurRadiusInPixels'、' sensitivity'、 'threshold'は、指定された解像度で微調整してより多くのコーナーを引き出すことができますが、検出器に入る画像の解像度を下げて実験して、大規模なコーナー。現在の実装では、最大256コーナーに制限されているため、画像の左上にこれらのすべてが検出された場合、これ以上の情報は報告されません。 –