《我的眼睛--图灵识别》第七章:预处理:图像滤镜

《我的眼睛–图灵识别》第七章:预处理:图像滤镜

什么是滤镜?

滤镜就好比是一种药物,医生会针对不同情况的病人开不一样的药方,这样才能做到对症下药解决问题。一般是指针对数字图像的某种数学处理,比如:二值化、灰度、色调分离、清除杂点、获取轮廓、缩放及各种数据变换等等。
图像滤镜预处理是指在进行文字识别之前的一些准备工作,主要目的是突出图像上字符的有关信息,去掉原始图像中的显见噪声(干扰)等影响识别的无关信息。这一阶段的工作非常重要,处理的效果直接影响到文字识别的准确率。

在这里插入图片描述
对症下药

1、彩色图像滤镜

二值化

二值化(Binaryzation)即所谓的图像仅有两种的颜色存在,如:黑白图像,就是将一张彩色图像上的每个像素点(px)的颜色RGB分量值根据一定的阈值条件分别设置为0或255数值,也就是将整张图像呈现出明显的仅有黑色(背景)和白色(目标字符)的视觉效果。

在这里插入图片描述
二值化图像

1.利用RGB分量的平均值作为阈值条件:
当颜色RGB分量值的总和除以3,大于预设置的阈值128时,等于白色(16进制:FFFFFF,10进制:16777215),否则等于黑色(16进制:000000,10进制:0)。

白色 = (R + G + B) / 3 > 128
黑色 = (R + G + B) / 3 < 128

这样,就完成了对图像的二值化滤镜处理,呈现出明显的仅有黑色和白色的视觉效果。

在这里插入图片描述
滤镜效果

在这里插入图片描述
实现流程

在这里插入图片描述

VB6代码:

调用例子:

Dim 滤镜图像() As Byte
Call 滤镜_二值化_Average(图像数据, 128, 滤镜图像)

封装函数:

'阈值 = 128
Public Sub 滤镜_二值化_Average(图像数据() As Byte, 阈值 As Long, 返回滤镜图像() As Byte)
Dim w As Long, h As Long,As Long,As Long, 平均值 As Long
Dim R As Byte, G As Byte, B As Byte= UBound(图像数据, 2)= UBound(图像数据, 3)
    For w = 0 ToFor h = 0 To'为阈值条件
            R = 图像数据(2, w, h)
            G = 图像数据(1, w, h)
            B = 图像数据(0, w, h)
            平均值 = (CLng(R) + G + B) / 3
            If 平均值 > 阈值 Then
                '为白色
                图像数据(0, w, h) = 255
                图像数据(1, w, h) = 255
                图像数据(2, w, h) = 255
            Else
                '为黑色
                图像数据(0, w, h) = 0
                图像数据(1, w, h) = 0
                图像数据(2, w, h) = 0
            End If
        Next
    Next
    返回滤镜图像 = 图像数据
End Sub

按键精灵2014脚本:

调用例子:

Call Plugin.TULING.Pixel_FromScreen(0,0,200,100)
//显示获取的图像
Call Plugin.TULING.Pixel_Preview()
Call Plugin.TULING.Filter_Binaryzation("0-128")    //二值化
Call Plugin.TULING.Pixel_Preview()

2.利用选取多个颜色值作为阈值条件:
可以直接通过拾取图像中所有文字上的颜色值作为阈值条件,符合其中某一个文字的颜色值时等于白色(16进制:FFFFFF,10进制:16777215),否则即为黑色(16进制:000000,10进制:0)。
拾取图像中的文字颜色值分别为:

数字0 (16进制:E1AC46,10进制:14789702) 数字5
(16进制:6465F2,10进制:6579698) 数字9 (16进制:AA5F61,10进制:11165537) 数字1
(16进制:47C280,10进制:4702848)

在这里插入图片描述
滤镜效果

在这里插入图片描述
实现流程

在这里插入图片描述

在这里插入图片描述
问题:
如何实现多值化滤镜处理效果?
比如实现三值化:黑(0,0,0),白(255,255,255),灰(127,127,127)。

在这里插入图片描述
(作业)三值化

VB6代码:

调用例子:

Dim 滤镜图像() As Byte
Dim 颜色串(2) As Long
颜色串(0) = 16777215
颜色串(1) = 0
颜色串(2) = 255
Call 滤镜_二值化_Picker(图像数据, 颜色串,滤镜图像)

封装函数:

Public Sub 滤镜_二值化_Picker(图像数据() As Byte, 颜色串() As Long, 返回滤镜图像() As Byte)
Dim w As Long, h As Long,As Long,As Long, 查找颜色 As Long, 数量 As Long, n As Long
Dim R As Byte, G As Byte, B As Byte= UBound(图像数据, 2)= UBound(图像数据, 3)
    数量 = UBound(颜色串)
    For w = 0 ToFor h = 0 To'为阈值条件
            R = 图像数据(2, w, h)
            G = 图像数据(1, w, h)
            B = 图像数据(0, w, h)
            查找颜色 = RGB(R, G, B)
            '为黑色
            图像数据(0, w, h) = 0
            图像数据(1, w, h) = 0
            图像数据(2, w, h) = 0
            For n = 0 To 数量
                If 查找颜色 = 颜色串(n) Then
                    '为白色
                    图像数据(0, w, h) = 255
                    图像数据(1, w, h) = 255
                    图像数据(2, w, h) = 255
                    Exit For
                End If
            Next
        Next
    Next
    返回滤镜图像 = 图像数据
End Sub

按键精灵2014脚本:

调用例子:

Dim 颜色串
Call Plugin.TULING.Pixel_FromScreen(0,0,200,100)
//显示获取的图像
Call Plugin.TULING.Pixel_Preview()
颜色串 = "FF0000|00FF00|0000FF|"
Call Plugin.TULING.Filter_Binaryzation(颜色串)    //二值化
Call Plugin.TULING.Pixel_Preview()

猜你喜欢

转载自blog.csdn.net/onedabian/article/details/87915338