实验五 图像恢复和图像分割 下载本文

实验五 图像恢复和图像分割

一、实验目的

1、熟悉并掌握MATLAB图像处理工具箱的使用; 2、理解并掌握常用的图像的恢复和分割技术。 二、实验环境

MATLAB 6.5以上版本、WIN XP或WIN2000计算机 三、相关知识

1 deconvwnr 维纳滤波,

用法:J = deconvwnr(I,PSF,NSR)

用维纳滤波算法对图片I进行图像恢复后返回图像J。 I是一个N维数组。PSF是点扩展函数的卷积。NSP是加性噪声的噪声对信号的功率比。

如:

I = im2double(imread('cameraman.tif'));

imshow(I);

title('Original Image '); %模拟运动模糊 Matlab中文论坛 LEN = 21; THETA = 11;

PSF = fspecial('motion', LEN, THETA); blurred = imfilter(I, PSF, 'conv', 'circular'); figure, imshow(blurred) %恢复图像www.iLoveMatlab.cn

wnr2 = deconvwnr(blurred_noisy, PSF); figure, imshow(wnr2) title('Restoration of Blurred')

2 edge

检测灰度或者二值图像的边缘,返回一个二值图像,1像素是检测到的边缘,0像素是非边缘。

用法:BW = edge(I,'sobel',thresh,direction),

I为检测对象;边缘检测算子可用sobel,roberts,prewitt,zerocross,log,canny;

thresh指定阈值,检测时忽略所有小于阈值的边缘,默认自动选择阈值;direction方向,在所指定的方向direction上,用 算子进行边缘检测horizontal(水平方向)、vertical(垂直方向)或both(两个方向)。

如:I = imread('circuit.tif');

BW1 = edge(I,'prewitt'); imshow(BW1); 3 strel

创建形态学结构元素。 用法:

SE = STREL('arbitrary',NHOOD,HEIGHT) 创建一个指定领域的非平面结构化元素。HEIGHT是一个矩阵,大小和NHOOD相同,他指定了NHOOD中任何非零元素的高度值。

SE = STREL('ball',R,H,N) 创建一个空间椭球状的结构元素,其X-Y平面半径为R,高度为H。R必须为非负整数,H是一个实数。N必须为一个非负偶数。当N>0时此球形结构元素由一系列空间线段结构元素来近似。 SE = STREL('diamond',R) 创建一个指定大小R平面钻石形状的结构化元素。R是从结构化元素原点到其点的距离,必须为非负整数。

SE = STREL('disk',R,N) 创建一个指定半径R的平面圆盘形的结构元素。这里R必须是非负整数. N须是0, 4, 6, 8.当N大于0时,圆盘形结构元素由一组N(或N+2)个周期线结构元素来近似。当N等于0时,不使用近似,即结构元素的所有像素是由到中心像素距离小于等于R的像素组成。N可以被忽略,此时缺省值是4。注: 形态学操作在N>0情况下要快于N=0的情形。

如:

se1 = strel('square',11) % 11乘以11的正方形 4 imerode 腐蚀图像

用法:IM2 = imerode(IM,SE)

腐蚀灰度、二进制或压缩二进制图像 IM ,返回腐蚀图像 IM2 。参数 SE 是函数 strel 返回的一个结构元素体或是结构元素体阵列。

如:使用一个盘状结构元素腐蚀一幅二进制图像。 originalBW = imread('circles.png'); se = strel('disk',11);

erodedBW = imerode(originalBW,se);

imshow(originalBW), figure, imshow(erodedBW)

5 imdilate 膨胀图像

用法:IM2 = imdilate(IM, SE)

膨胀灰度图像、二值图像、或者打包的二值图像IM,返回膨胀图像M2。变量SE是一个结构元素或者一个结构元素的数组,其是通过strel函数返回的。

如:利用一个运行结构元素膨胀灰度图像。 I = imread('cameraman.tif'); se = strel('ball',5,5); I2 = imdilate(I,se);

imshow(I), title('Original')

figure, imshow(I2), title('Dilated')

三、实验步骤

1、产生运动模糊图像,运用维纳滤波进行图像恢复,显示结果。

原图

a=imread('19.jpg'); >> imshow(a) I = im2double(a); >> imshow(I) LEN = 21;

THETA = 11;

PSF = fspecial('motion', LEN, THETA);

blurred = imfilter(I, PSF, 'conv', 'circular'); figure, imshow(blurred)

运动模糊

wnr2 = deconvwnr(blurred_noisy, PSF); figure, imshow(wnr2)

运动恢复

2、采用三种不同算子检测图像边缘,显示结果. d=rgb2gray(a); >> imshow(d)

q=edge(d,'sobel');

>> subplot(1,3,1),imshow(q) >> e=edge(d,'roberts');

>> subplot(1,3,2),imshow(e) >> r=edge(d,'prewitt');

>> subplot(1,3,3),imshow(r)

sobel算子roberts算子prewitt算子

3、对二值图像分别进行方形模板3*3和5*5的膨胀和腐蚀操作,显示结果。

腐蚀:

o=im2bw(a,0.5); imshow(o)

se=strel('square',3); b=imerode(o,se); se=strel('square',5); g=imerode(o,se)

subplot(1,3,1),imshow(o); subplot(1,3,2),imshow(b); subplot(1,3,3),imshow(g);

二值图3*3腐蚀5*5腐蚀

o=im2bw(a,0.5); imshow(o)

se= imdilate ('square',3); b=imerode(o,se); se=strel('square',5); g= imdilate (o,se)

subplot(1,3,1),imshow(o); subplot(1,3,2),imshow(b); subplot(1,3,3),imshow(g);

膨胀:

o=im2bw(a,0.5); imshow(o)

se=strel('square',3); >> e=imdilate(o,se);

se=strel('square',5); t=imdilate(o,se);

>> subplot(1,3,2),imshow(e); >> se=strel('square',5);

subplot(1,3,1),imshow(o); subplot(1,3,2),imshow(e); subplot(1,3,3),imshow(t);

原图3*3膨胀5*5膨胀