但是我发现它产生了不必要的文本倾斜.
寻找替代品我发现 GPUImage具有很高的价值,它解决了倾斜的问题.
在应用OCR之前,我使用GPUImage code like this对输入图像进行二值化.
但是,阈值不包括我得到的图像范围.
查看输入图像中的两个样本:
我不能用相同的阈值处理两者.
低价值似乎随后很好,第一个价值更高.
第二个图像似乎特别复杂,因为无论我为阈值设置了什么值,我都不会将所有字符都正确地二进制化.另一方面,我的C二值化例程似乎做得对,但我没有太多的见解去尝试像GPUImage中的简单阈值.
我该怎么处理?
更新:
我尝试使用GPUImageAverageluminanceThresholdFilter,默认乘数= 1.它适用于第一个图像,但第二个图像仍然是问题.
二值化的一些更多样化的输入:
更新II:
在经过this answer by Brad之后,尝试了GPUImageAdaptiveThresholdFilter(也包含了GPUImagePicture,因为之前我只在UIImage上应用它).
有了这个,我得到了二次图像二值化完美.然而,当我设置模糊大小为3.0时,第一个似乎在二值化后有很多噪音. OCR导致添加额外字符.使用较低的模糊大小值,第二个图像会失去精度.
这里是:
+(UIImage *)binarize : (UIImage *) sourceImage{ UIImage * grayScaledimg = [self toGrayscale:sourceImage]; GPUImagePicture *imageSource = [[GPUImagePicture alloc] initWithImage:grayScaledimg]; GPUImageAdaptiveThresholdFilter *stillimageFilter = [[GPUImageAdaptiveThresholdFilter alloc] init]; stillimageFilter.blurSize = 3.0; [imageSource addTarget:stillimageFilter]; [imageSource processImage]; UIImage *imageWithApplIEdThreshold = [stillimageFilter imageFromCurrentlyProcessedOutput]; // UIImage *destimage = [thresholdFilter imageByFilteringImage:grayScaledimg]; return imageWithApplIEdThreshold;}解决方法 对于预处理步骤,您需要 adaptive thresholding.
我使用opencv灰度和自适应阈值方法得到了这些结果.也许通过添加低通噪声滤波(高斯或中值),它应该像魅力一样工作.
我使用provisia(它是一个ui来帮助你快速处理图像)来获得我需要的块大小:这里提供的图像为43.如果您从更近或更远的地方拍摄照片,块大小可能会改变.如果你想要一个通用算法,你需要开发一个应该搜索最佳大小的算法(搜索直到检测到数字)
编辑:我刚看到最后一张图片.它非常小.即使您应用最佳的预处理算法,也不会检测到这些数字.采样不会解决问题,因为会产生噪音.
总结以上是内存溢出为你收集整理的用于OCR的iOS UIImage二值化 – 处理具有不同亮度的图像全部内容,希望文章能够帮你解决用于OCR的iOS UIImage二值化 – 处理具有不同亮度的图像所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)