gpt4 book ai didi

用于 OCR 的 iOS UIImage 二值化 - 处理具有不同亮度的图像

转载 作者:可可西里 更新时间:2023-11-01 04:44:12 26 4
gpt4 key购买 nike

我有一个 C++ 二进制化例程,用于以后的 OCR 操作。但是我发现它产生了不必要的文本倾斜。搜索我找到的替代品 GPUImage非常有值(value),它解决了倾斜问题。

我正在使用 GPUImage code like this在应用 OCR 之前对我的输入图像进行二值化。

但是阈值不包括我得到的图像范围。查看我的输入图像中的两个样本:

enter image description here

enter image description here

我无法处理具有相同阈值的两者。较低的值(value)似乎适合后来,较高的值(value)适合第一个。

第二张图片似乎特别复杂,因为无论我为阈值设置什么值,我都无法正确地将所有字符二值化。另一方面,我的 C++ 二值化例程似乎做对了,但我没有太多的见解来试验它,就像 GPUImage 中的简单阈值一样。

我该如何处理?

更新:

我尝试使用默认乘数 = 1 的 GPUImageAverageLuminanceThresholdFilter。它适用于第一张图片,但第二张图片仍然存在问题。

一些更多样化的二值化输入:

enter image description here

enter image description here

更新二:

经过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 得到了这些结果灰度和自适应阈值方法。也许加上低通噪声过滤(高斯或中值)它应该像魅力一样工作。

luminance

diverse

我用了provisia (它是一个帮助您快速处理图像的用户界面)以获得我需要的 block 大小:43 用于您在此处提供的图像。如果您从更近或更远的地方拍照, block 大小可能会改变。如果你想要一个通用算法,你需要开发一个应该搜索最佳大小的算法(搜索直到检测到数字)

编辑: 我刚看到最后一张图片。它小得无法治疗。即使您应用最好的预处理算法,您也不会检测到这些数字。采样不是解决方案,因为周围会出现噪音。

关于用于 OCR 的 iOS UIImage 二值化 - 处理具有不同亮度的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18630842/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com