Я пытаюсь получить угловые точки из неподвижного изображения, используя 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
}
Эта функция всегда возвращает []
так что, очевидно, не работает.
Интересная деталь. Я собрал проект FilterShowcaseSwift из примеров GPUImage, и фильтр не смог найти очень четкие углы, как на листе бумаги на черном фоне.
Что касается отсутствия обнаружения ясных углов, то угловой детектор Харриса не является инвариантом по шкале, поэтому более высокое разрешение изображения, тем резче угол, который он будет искать. «BlurRadiusInPixels», «чувствительность» и «порог» могут быть настроены с заданным разрешением, чтобы вытащить больше или меньше углов, но вы также можете поэкспериментировать с уменьшением разрешения изображений, поступающих в детектор, масштабные углы. Текущая реализация также ограничена максимум 256 углами, поэтому, если все они обнаружены в левом верхнем углу изображения, больше не будет сообщено. –