Tôi đang cố gắng lấy các điểm góc từ hình ảnh tĩnh bằng cách sử dụng GPUImageHarrisCornerDetectionFilter
.Cách lấy các góc bằng cách sử dụng GPUImageHarrisCornerDetectionFilter
Tôi đã xem xét các mã ví dụ từ dự án, tôi đã xem xét các tài liệu, và tôi đã nhìn bài này đó là về những điều tương tự: GPUImage Harris Corner Detection on an existing UIImage gives a black screen output
Nhưng tôi không thể làm cho nó hoạt - và tôi có một thời gian khó hiểu làm thế nào điều này là nghĩa vụ phải làm việc với hình ảnh tĩnh.
Những gì tôi có vào thời điểm này đây là:
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
}
Chức năng này luôn trả về []
vì vậy nó rõ ràng không phải làm việc.
Một chi tiết thú vị - tôi đã biên soạn dự án FilterShowcaseSwift từ ví dụ GPUImage và bộ lọc không tìm thấy các góc rất rõ ràng, như trên một tờ giấy trên nền đen.
Do thiếu góc tìm kiếm rõ ràng, đầu dò góc Harris không phải là bất biến quy mô, vì vậy độ phân giải hình ảnh càng cao, góc sẽ càng sắc nét hơn. Các 'blurRadiusInPixels',' độ nhạy' và 'ngưỡng' có thể được tinh chỉnh ở độ phân giải đã cho để kéo ra nhiều góc hơn hoặc ít hơn, nhưng bạn cũng có thể thử nghiệm với việc giảm độ phân giải của hình ảnh đi vào máy dò để chúng thu được lớn hơn- góc tỷ lệ. Việc triển khai hiện tại cũng bị giới hạn ở mức tối đa 256 góc, vì vậy nếu tất cả những điều này được phát hiện ở phía trên bên trái của hình ảnh, sẽ không có báo cáo nào khác được báo cáo. –