实验代码
clear;
close all;
IM = imread('wirebond_mask.tif');
figure('name','原图','NumberTitle','off');
imshow(IM);
SE2=strel('square',11);
SE3=strel('square',15);
SE4=strel('square',45);
IM2=imerode(IM,SE2);imwrite(IM2,'erode11.jpg');
figure('name','用大小11*11的结构单元腐蚀的图像','NumberTitle','off');
imshow(IM2);
IM3=imerode(IM,SE3);imwrite(IM3,'erode15.jpg');
figure('name','用大小15*15的结构单元腐蚀的图像','NumberTitle','off');
imshow(IM3);
IM4=imerode(IM,SE4);imwrite(IM3,'erode45.jpg');
figure('name','用大小45*45的结构单元腐蚀的图像','NumberTitle','off');
imshow(IM4);
clear;
close all;
IM = imread('text_gaps.tif');
figure('name','原图');
imshow(IM);
SE = strel('diamond',1)'%得到十字形的结构元
IM2 = imdilate(IM,SE);
figure('name','膨胀后桥接裂隙的图像');
imshow(IM2);
imwrite(IM2,'dilatedtext.jpg');
实验代码
clear;
close all;
IM = imread('noisy_fingerprint.tif');
figure('name','原图'); imshow(IM);
SE = strel('square',3);%得到边长为3的方形结构单元
IM2 = imerode(IM,SE);
figure('name','用大小3*3的结构元腐蚀原图像的结果'); imshow(IM2);
imwrite(IM2,'eroded_ori_fingle.jpg');%存储
IM3 = imdilate(IM2,SE);
figure('name','用大小3*3的结构元开操作原图像的结果'); imshow(IM3);
imwrite(IM3,'openedfingle.jpg');
IM4 = imdilate(IM3,SE);
figure('name','用大小3*3的结构元膨胀开操作原图像的结果'); imshow(IM4);
imwrite(IM2,'dilatedopenedimg.jpg');
IM5 = imdilate(IM4,SE);
figure('name','形态学滤波结果'); imshow(IM5);
imwrite(IM5,'result.jpg');
实验代码
clear;
close all;
IM = imread('licoln from penny.tif');
figure('name','原图');imshow(IM);
SE = strel('square',3);%得到边长为3的方形结构元
SE2 = strel('square',5);%得到边长为5的方形结构元
IM2 = imerode(IM,SE); IM_contour3_3 = IM-IM2;
figure('name','提取边界的结果');imshow(IM_contour3_3);
imwrite(IM_contour3_3,'contour of licoln3_3.jpg');%存储
IM3 = imerode(IM,SE2); IM_contour5_5 = IM-IM3;
figure('name','提取边界的结果');imshow(IM_contour5_5);
imwrite(IM_contour5_5,'contour of licoln5_5.jpg');%存储
试用malab程序程序设计语言编写二值图像的空洞填充程序
解题思路
空洞图像的定义:由前景像素相连接的边界所包围的一个背景区域。对于二值图像,可以理解为被白色区域所包围的黑色区域就是空洞区域。
大致思路如下:
0, 设原图像为 A。
1, 首先A向外延展一到两个像素,并将值填充为背景色(0),标记为B。
2, 使用floodFill函数将B的大背景填充,填充值为前景色(255),种子点为(0,0)即可(步骤一可以确保(0,0)点位于大背景),标记为C。
3, 将填充好的图像裁剪为原图像大小(去掉延展区域),标记为D。
4, 将D取反与A相加即得填充的图像,E=A|(~D)。
另外一种思路是:
找到一个二值化0之后向四周扩散出一个连通区域,也就是广度优先搜索,记录下四个方向上搜索到的最远位置,如果有一个方向上的位置是图像边缘,那么就不是一个封闭的区域,否则就是一个封闭的区域,再次广度优先搜索填充,这里直接调用matlab里面自带函数imfill();
实验代码:
clear all
close all
I=rgb2gray(imread('saturn.png'));
subplot(121);imshow(I);title('原图');
bw=im2bw(I);
bw1=imclearborder(bw); %清除边界
%subplot(132);imshow(bw1);
bw2=imfill(bw1,'holes');
subplot(122);imshow(bw2);title('空洞填充后');