Tôi đang sử dụng GPUImageHoughTransformLineDetector để cố gắng phát hiện các văn bản đánh dấu trong hình:Sử dụng GPUImage và GPUImageHoughTransformLineDetector để phát hiện văn bản được đánh dấu ranh giới hộp
Tôi đang sử dụng đoạn mã sau để thử và phát hiện màu xanh bounding dòng hộp:
GPUImagePicture *stillImageSource = [[GPUImagePicture alloc] initWithImage:rawImage];
GPUImageHoughTransformLineDetector *lineFilter = [[GPUImageHoughTransformLineDetector alloc] init];
[stillImageSource addTarget:lineFilter];
GPUImageLineGenerator *lineDrawFilter = [[GPUImageLineGenerator alloc] init];
[lineDrawFilter forceProcessingAtSize:rawImage.size];
__weak typeof(self) weakSelf = self;
[lineFilter setLinesDetectedBlock:^(GLfloat *flt, NSUInteger count, CMTime time) {
NSLog(@"Number of lines: %ld", (unsigned long)count);
GPUImageAlphaBlendFilter *blendFilter = [[GPUImageAlphaBlendFilter alloc] init];
[blendFilter forceProcessingAtSize:rawImage.size];
[stillImageSource addTarget:blendFilter];
[lineDrawFilter addTarget:blendFilter];
[blendFilter useNextFrameForImageCapture];
[lineDrawFilter renderLinesFromArray:flt count:count frameTime:time];
weakSelf.doneProcessingImage([blendFilter imageFromCurrentFramebuffer]);
}];
[stillImageSource processImage];
Mỗi lần tôi chạy này không phụ thuộc vào edgeThreshold hoặc 1023 dòng và kết quả đầu ra trông giống như:
Không rõ lý do tại sao thay đổi ngưỡng không làm bất cứ điều gì, nhưng tôi chắc chắn tôi hiểu nhầm điều gì đó. Bất cứ ai có bất cứ ý tưởng về cách tốt nhất làm điều này?
Ok điều này cực kỳ hữu ích. Sử dụng ý tưởng của bạn về một tiền lọc và sau đó lọc nó thông qua các phát hiện cạnh bản thân mình với một bán kính mờ 5px Tôi có thể có được hình ảnh này mà cảm thấy SO CLOSE: https://dl.dropboxusercontent.com/spa/zsb1h2lxmgrll8w/zz-6b7tc .png (có 12 dòng trong hình ảnh này). Tôi biết LineFilter đã đặt nó thông qua một phát hiện cạnh nhưng tôi muốn làm một trước chỉ để chắc chắn. Tôi không chắc làm thế nào nó có thể không phát hiện các đường ngang trong bức ảnh đó. My lineDetectionThreshold là 0,3 trong ảnh đó. (Tôi đang sử dụng chủ) –
@IanOwnbey - Có thể có một lỗi trong một heuristic tôi sử dụng để lọc ra một số giá trị tiếng ồn. Hãy xem trong phương thức -extractLineParametersFromImageAtFrameTime: của GPUImageHoughTransformLineDetector.m nơi tôi có các bình luận "Test for the case". Logic của tôi có thể thiếu sót ở đó. Xem nếu loại bỏ những điều kiện đó (chỉ sử dụng các trường hợp khác) làm cho điều này tốt hơn. Nếu vậy, tôi có thể loại bỏ điều đó. –
Ok cảm ơn tuyệt vời, một điểm đúng hướng là tất cả tôi cần hy vọng :) –