数字图像处理7:形态学图像处理 I 文本图像的二值形态学处理(提取长字符、孔洞填充、边界清理)

文本图像的二值形态学处理

形态学重建有很宽的实际应用领域,下面有三个关于文本图像的二值图像的形态学处理实验,分别是提取较长的字符,填充孔洞和边缘字符消除。

提取长字符

这里先给出主函数,具体功能函数后面给出:

%% 运行 main_zifu.m 第一个实验
clc;
clear;
close all;

%% 课本图 9.29
% 读取图片
im = imread('text_image.tif');   % 原始图像 uint8
[im1,im2,im3] = my_reopen(im);

%% 课本图 9.31
im4 = logical(1 - im);
[im5,im6] = im_KonDong(im4);

%% 课本图 9.32
[im8,im7] = im_board(im);

%% 将结果保存到当前目录下的result文件夹下
imwrite(im1, sprintf('result/%s.jpg','1_im1'));
imwrite(im2, sprintf('result/%s.jpg','1_im2'));
imwrite(im3, sprintf('result/%s.jpg','1_im3'));
imwrite(im4, sprintf('result/%s.jpg','1_im4'));
imwrite(im5, sprintf('result/%s.jpg','1_im5'));
imwrite(im6, sprintf('result/%s.jpg','1_im6'));
imwrite(im7, sprintf('result/%s.jpg','1_im7'));
imwrite(im8, sprintf('result/%s.jpg','1_im8'));

%% 显示结果
figure;
subplot(221); imshow(im); title('图像'); axis on
subplot(222); imshow(im1); title('腐蚀图像'); axis on
subplot(223); imshow(im2); title('开操作图像'); axis on
subplot(224); imshow(im3); title('重建开图像'); axis on
figure;
subplot(221); imshow(im); title('图像'); axis on
subplot(222); imshow(im4); title('反色图像'); axis on
subplot(223); imshow(im5); title('标记图像'); axis on
subplot(224); imshow(im6); title('空洞填充图像'); axis on
figure;
subplot(121); imshow(im7); title('图像'); axis on
subplot(122); imshow(im8); title('边缘消除图像'); axis on

实验思想

重建开操作:

形态学开操作中,腐蚀会删除小的物体,而后续的膨胀会试图恢复遗留物体的形状。然而这种恢复的准确性高度依赖于物体的形状和所用结构元的相似性。重建开操作可正确地恢复腐蚀后所保留物体的形状。
图像 F 的大小为 n 的重建开操作,定义为来自 F 的大小为 n 的腐蚀的 F 的膨胀重建;

O R n ( F ) = R F D [ ( F ( − ) n B ) ] O_R^n(F) = R_F^D[(F(-)nB)] ORn(F)=RFD[(F()nB)]

实验步骤

首先采用,长度与平均字符长度相同的结构元,对图像进行腐蚀,之后将其进行直接膨胀留作对比。另一幅图像进行多次重建开操作。
在这里的实验中,由于需要多次使用膨胀函数,而且实验图像是二值化图像,因此使用了卷积的方式进行膨胀,加快运算结果。最后程序运行能够在较短时间内完成。

代码

重建开:

function [im1,im2,im3] = my_reopen(im)

% B1
k = 1:51;B(k,1) = 1;
% 腐蚀
im1 = logical(my_imerode(im,B));
% 膨胀
im2 = mybi_imdilate(im1,B);
% 重新选择B
j = 1:3;k = 1:51;B(k,j) = 1;
% 测地膨胀
im3 = logical(min(im2,im));
for i = 1:30
    im3 = mybi_imdilate(im3,B);
    im3 = logical(min(im3,im));
end
end

function im_d = mybi_imdilate(im,B)

%% 图像膨胀
im_d = logical(conv2(im,B,'same'));
end
function im_e = my_imerode(im,B)
% 以B的结构元进行腐蚀
%% 得到图像尺寸
[M,N] = size(im);
im_f = double(im);

%% 得到B的尺度
[m,n] = size(B);
m_2 = floor((m+1)/2);
n_2 = floor((n+1)/2);

%% 图像延拓
im_f = [im_f(:,n-1:-1:1),im_f,im_f(:,N:-1:N-n+2)];
im_f = [im_f(m-1:-1:1,:);im_f;im_f(M:-1:M-m+2,:)];
im_f = double(im_f);

%% 图像腐蚀
im_e = zeros(M,N);
for i = 1:M
    for j = 1:N
        im_sub = im_f(i+m_2-1:i+m_2+m-2,j+n_2-1:j+n_2+n-2);
        C = im_sub.*B + 255*(1-B);
        im_e(i,j) = min(C(:));
    end
end
%im_e = logical(im_e); 
end

1.1.4实验结果
图一是原图像,图二是进行结构元腐蚀后的图像,图三是图一的开操作处理后的图像,图 四是图一进行重建开操作的图像。
在这里插入图片描述

如上图所示,可以通过特定的结构元腐蚀之后,只保留了长字符的特征点,之后如果直接使用膨胀,则会如图三所示的一样,仅仅是长条纹。之后使用多次的测地膨胀,来完成重建开操作,最后可以得到仅含有长字符的图像。

孔洞填充

填充孔洞:一个基于形态学重建的全自动化过程。

实验思想

标记图像:F (x, y) = 1 − I(x, y) 当 (x,y) 为图像的边缘时,当 (x,y) 在图像内部时,全为0。之后利用标记图像,使用 3*3 的结构元进行重建。由于图像较大,进行了大概 500 次测地膨胀,可以得到较好的孔洞图像。最后在原图上加上孔洞图像进行填充,即可得到需要的填充后图像。

代码
function [im_k,im_f] = im_KonDong(im)

%% 边缘图像
[M,N] = size(im);
im_f = im;
im_b = [im_f(2:M-1,1),zeros(M-2,N-2),im_f(2:M-1,N)];
im_b = [im_f(1,:);im_b;im_f(M,:)];
im_k = im_b;
%% 求出B
k = 1:3;l = 1:3;B(k,l) = 1;

%% 测地膨胀,提取空洞信息
for i = 1:500
    im_b = mybi_imdilate(im_b,B);
    im_b = logical(min(im_b,im));
end

im_f = logical(1-im_b);
% im_b = logical(im_f - logical(1-im));
end
实验结果

图一是原图像,图二是模板图像 (原图像的补集),图三是标记图像,图四是填充后的图像。
在这里插入图片描述

边界清理

边界清除:针对后续形状的图像物体提取,删除接触到边界的物体。

实验思想

标记图像:F (x, y) = I(x, y) 当 (x,y) 为图像的边缘时,当 (x,y) 在图像内部时,全为 0。之后利用标记图像,使用 3*3 的结构元进行重建。由于图像较大,进行了大概 500 次测地膨胀,之后可以完整的提取出接触边缘的物体。最后计算图像差 X = I − RD(F ) ,即可得到删除接触边缘物体的图像。

代码
function [im_o,im_b] = im_board(im)

%% 边缘图像
[M,N] = size(im);
im_f = im;
im_b = [im_f(2:M-1,1),zeros(M-2,N-2),im_f(2:M-1,N)];
im_b = [im_f(1,:);im_b;im_f(M,:)];

%% 求出B
k = 1:3;
l = 1:3;
B(k,l) = 1;

%% 测地膨胀,提取接触边缘信息
for i = 1:500
    im_b = mybi_imdilate(im_b,B);
    im_b = logical(min(im_b,im));
end

im_o = (im-(logical(im_b)));
end
实验结果

图一是标记图像,图二是没有接触边界的图像。
在这里插入图片描述
删除接触边界的物体的算法是一个很有用的工具,因为:
(1)它可以用于屏蔽图像,以便对进一步处理只保留完整的物体。
(2)它可用作在视野中存在部分物体的一个信号。

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值