图像处理:形态学处理

常见的基础形态学操作有:

skimage中含有针对0-1binary图像优化过的形态学操作,可以更快的实现。

骨骼提取(图象细化 / image thinning)

这是一种形态学处理,我在提取手写笔迹的骨骼的时候用到了,因为之间简单的开闭运算的话,容易破坏图像的结构连通性。而骨骼提取则会在保证结构连通性的前提下,细化图像。

API调用

scikit-image包有两种实现,使用方法如下:

  • skimage.morphology.skeletonize:可用于2D,3D和ndarray图片的骨骼提取
  • skimage.morphology.thin:只能用于binary image
  • skimage.morphology.medial_axis:binary image,是有超过1个最近点到对象边界的点的集合。通常被称为拓扑骨骼
from skimage import morphology
import cv2

img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 转成灰度图
_, img_bin = cv2.threshold(img_gray, 100, 255, cv2.THRESH_BINARY_INV)  # 二值化处理
img_bin[img_bin == 255] = 1  # 将值变成0-1,骨骼提取函数必须要输入01的二值化图象
# 方法一 skeletonize
img_skeleton = morphology.skeletonize(img_bin)  # 骨骼提取
img = img_skeleton.astype(np.uint8) * 255  # 值从01重新映射回0-255
# 方法二 thin
img_thin = thin(img_bin)
img = img_thin.astype(np.uint8)
# 方法三 medial_axis
img_

应用

  1. 笔迹细化:我在识别数学公式的时候,识别经常会将加号和除号混淆,所以对公式图像进行了细化处理,让除号的两点尽可能的分开,不被识别成加号。有效果,但是不大。

膨胀(dilate)

腐蚀(erode)

开运算 -> 白顶帽变换

白顶帽:

会返回图像中的亮点,这些黑点都小于结构元素

闭运算 -> 黑顶帽变换

对于0-1的binary图片,更快的闭运算:skimage.morphology.binary_closing

黑顶帽:闭运算 - 原图

  • skimage.morphology.black_tophat

会返回图像中的黑点,这些黑点都小于结构元素

猜你喜欢

转载自blog.csdn.net/Jiangnan_Cai/article/details/127323342