📜  布尔玛删除尺寸(1)

📅  最后修改于: 2023-12-03 14:54:00.730000             🧑  作者: Mango

布尔玛删除尺寸

介绍

布尔玛删除尺寸(Bouma-Deleting Dimension)又称为布尔玛定理,它是一种用于字体学研究的算法,可以通过删除一些特定的尺寸来实现识别不同字体之间的差异。也可以应用于图像处理,用于字符识别、特征提取等领域。

原理

在一个字符的不同字体中,同样大小的字母所占据的像素并不相等,因此,通过对字符进行不同的缩放,可以识别不同字体的差异。但是,缩放会带来像素的变化,在图像处理中,这种变化是不可避免的,一些像素的连通性也会被破坏。

Bouma实验表明,字符的可识别的信息只与其边缘部分相关。同时,字符的边缘由于不同字体大致上都是一致的,因此,字符形状的区别,可以通过删除字符中对可识别性最小的像素,得到相对稳定的信息。这个像素通常位于字符边缘,并且在不同字体中都是相似的。

应用

针对Bouma-Deleting Dimension算法的应用有很多,比如:

  • 字符识别
  • 文字定位
  • 汉字拆分
  • 特征提取等等。
代码实现

以下为使用Python对布尔玛删除尺寸进行应用示例:

import cv2
import numpy as np

# 读取图片
img = cv2.imread('font_sample.png', 0)

# 定义删除窗口大小和种子像素阈值
window_size = 3
threshold = 128

# 定义一个删除函数
def bouma_delete(img):
    # 首先,将图片进行二值化处理
    img = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]
    
    # 然后,使用腐蚀操作对边缘进行处理
    kernel = np.ones((window_size, window_size), dtype=np.uint8)
    eroded = cv2.erode(img, kernel)
    
    # 接着,提取边缘、种子和中心部分
    contour = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0]
    seed = [contour[0][0][0], contour[0][0][1]]
    center = np.array([img.shape[1] / 2, img.shape[0] / 2], dtype=np.int32)

    # 对图片进行类似于八矩形的处理,找到应该删除的像素
    replace_point = []
    for i in range(-window_size, window_size):
        for j in range(-window_size, window_size):
            if i == j or i == -j:
                continue
            p = np.array([seed[0] + i, seed[1] + j], dtype=np.int32)
            if p[0] < 0 or p[1] < 0 or p[0] >= img.shape[1] or p[1] >= img.shape[0]:
                continue
            if img[p[1], p[0]] >= threshold and eroded[p[1], p[0]] < threshold:
                replace_point.append(p)

    # 最后,删除不必要的像素
    for p in replace_point:
        img[p[1], p[0]] = 0
        
    # 返回新的二值化图片
    return img

# 对图片进行尺寸删除操作
img_bouma = bouma_delete(img)

# 展示删除之前和删除之后的效果
cv2.imshow('font original', img)
cv2.imshow('font bouma', img_bouma)

# 等待按键关闭
cv2.waitKey(0)
cv2.destroyAllWindows()

以上代码为一个较为简单的开源代码,相关调用的函数可在Python中的OpenCV中进行查找。

参考资料
  1. Bouma-Deleting Dimension
  2. Understanding Bouma, or, the Art of Separating Words
  3. A Method for the Extraction of Contours and Resistance Points in Binary Images