HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了用于OCR的iOS UIImage二值化 – 处理具有不同亮度的图像大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个C二进制化例程,我用于以后的OCR操作.
但是我发现它产生了不必要的文本倾斜.
寻找替代品我发现 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二值化 – 处理具有不同亮度的图像所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。