基于相同颜色连通像素个数的统计进行图像字符识别

简介: 无论是图像,音频的识别,不外乎是对各种特征(特征向量)进行统计归纳。通过观察,发现这是一张简单的,非常有规律可循的图。 越有规律越容易进行分类。这里的思路就是自左至右依次对相同颜色的像素连通区进行像素个数统计,从而制成像素与字符对应的字典进行识别。

问题: 对如下图中的字符进行识别:

  • ldg_3681.png

解题思路:

  • 无论是图像,音频的识别,不外乎是对各种特征(特征向量)进行统计归纳。
  • 放大后的样本:3681.png
  • 通过观察,发现这是一张简单的,非常有规律可循的图。 越有规律越容易进行分类。这里的思路就是自左至右依次对相同颜色的像素连通区进行像素个数统计,从而制成像素与字符对应的字典进行识别。

局限性及应对措施:

  • 此种方法只针对'少量的',’简单的‘字符图形。若字符种类过多,容易造成不同像素个数冲突的问题。
  • 针对冲突问题,一种有限的解决办法即针对’不同’的特征,进行二次验证。

python实现:

from PIL import Image
import numpy as np

class dfs_simple_digital_chacpt(object):
    def __init__(self, path):
        self.white = [238, 238, 238]
        self.row_num = 10
        self.col_num = 40
        self.walked_set = set()
        self.roming_set = set()
        self.dfs_num = 0
        im = Image.open(path)
        self.image_array = np.array(im).tolist()

    def dfs(self, x, y, rgb):
        '''
        desc:用递归实现搜索范围内相同rgb值的像素
        :param x: 
        :param y: 
        :param char: 
        :return: 
        '''
        self.roming_set.add(tuple([x, y]))
        if 0 > x or 0 > y or x >= self.row_num or y >= self.col_num: # 越界检查
            return
        if tuple([x,y]) in self.walked_set: # 重复遍历检查
            return
        if rgb != self.image_array[x][y]: # 目标rgb值检查
            return

        self.walked_set.add(tuple([x, y]))

        self.dfs(x + 1, y, rgb)  # x
        self.dfs(x, y + 1, rgb)  # y
        self.dfs(x - 1, y, rgb)  # -x
        self.dfs(x, y - 1, rgb)  # -y
        self.dfs(x + 1, y + 1, rgb)  # Ⅰ
        self.dfs(x + 1, y - 1, rgb)  # Ⅱ
        self.dfs(x - 1, y - 1, rgb)  # Ⅲ
        self.dfs(x - 1, y + 1, rgb)  # Ⅳ
        return

    def walk(self):
        '''
        desc: 
        :return: 
        '''
        for y in range(self.col_num):
            for x in range(self.row_num):
                rgb = self.image_array[x][y]

                if tuple([x, y]) in self.roming_set:
                    continue
                if rgb != self.white:
                    self.dfs(x, y, rgb)
                    num = len(self.walked_set)
                    print(num)

                    self.walked_set.clear()
        self.roming_set.clear()

if __name__ == '__main__':
    path = ''
    c = dfs_simple_digital_chacpt(path)
    dfs_num = c.walk()
目录
相关文章
|
机器学习/深度学习 传感器 算法
【交互式阈值二进制图像】采用彩色或单色图像通过交互/手动方式阈值单色图像或彩色图像的单个色带研究(Matlab代码实现)
【交互式阈值二进制图像】采用彩色或单色图像通过交互/手动方式阈值单色图像或彩色图像的单个色带研究(Matlab代码实现)
|
6月前
|
计算机视觉
OpenCV图像像素值统计
OpenCV图像像素值统计
|
6月前
|
算法 计算机视觉
图像处理之计算二值连通区域的质心
图像处理之计算二值连通区域的质心
43 0
|
6月前
|
Web App开发 算法 Java
图像放缩之双线性内插值
图像放缩之双线性内插值
29 0
|
7月前
|
传感器 人工智能 搜索推荐
用 ChatGPT 4.0 实现获取并保存 RealSense 相机的深度图像,处理colorizer,histogram equalization配置,解决深度图像颜色分布异常问题
用 ChatGPT 4.0 实现获取并保存 RealSense 相机的深度图像,处理colorizer,histogram equalization配置,解决深度图像颜色分布异常问题
108 0
用 ChatGPT 4.0 实现获取并保存 RealSense 相机的深度图像,处理colorizer,histogram equalization配置,解决深度图像颜色分布异常问题
|
7月前
|
计算机视觉
OpenCV(三十三):计算轮廓面积与轮廓长度
OpenCV(三十三):计算轮廓面积与轮廓长度
279 0
|
7月前
[Halcon&图像] 图像、区域和轮廓相互转化
[Halcon&图像] 图像、区域和轮廓相互转化
301 1
|
机器学习/深度学习 人工智能 算法
OpenCV-差分法实现绿叶识别(图像差分+颜色通道)
OpenCV-差分法实现绿叶识别(图像差分+颜色通道)
198 0
|
定位技术
任意一张图片的CGCS2000坐标配准
任意一张图片的CGCS2000坐标配准
152 0
|
计算机视觉
opencv 之图像的边界填充及一些数据计算
opencv 之图像的边界填充及一些数据计算
116 0