急!matlab中怎么把显示的图片放大。 如:figure(1);matlab subplot函数(121); imshow(a);matlab subplot函数(122); imshow(b);

(matlab)数字图像处理实验报告_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
10页3下载券4页免费14页2下载券4页¥2.0011页1下载券 14页1下载券14页1下载券6页1下载券10页2下载券9页1下载券
喜欢此文档的还喜欢39页免费19页免费11页1下载券11页免费7页1下载券
(matlab)数字图像处理实验报告|(​m​a​t​l​a​b​)​数​字​图​像​处​理​实​验​报​告​,​实​验​一​至​七
把文档贴到Blog、BBS或个人站等:
普通尺寸(450*500pix)
较大尺寸(630*500pix)
你可能喜欢Matlab中图像函数大全&2
边学边和大家交流,我将我在学习中搜集到的资料和大家分享!
图像处理函数详解——strel
功能:用于膨胀腐蚀及开闭运算等操作的结构元素对象(本论坛随即对膨胀腐蚀等操作进行讲解)。
用法:SE = strel(shape,parameters)
创建由指定形状shape对应的结构元素。其中shape的种类有
arbitrary'
'periodicline'
'rectangle'
参数parameters一般控制SE的大小。
se1 = strel('square',6)
% 创建6*6的正方形
se2 = strel('line',10,45)
% 创建直线长度10,角度45
se3 = strel('disk',15)
% 创建圆盘半径15
se4 = strel('ball',15,5)
% 创建椭圆体,半径15,高度5
图像处理函数详解——roipoly
功能:用于选择图像中的多边形区域。
用法:BW = roipoly(I,c,r)
BW = roipoly(I)
BW = roipoly(x,y,I,xi,yi)
[BW,xi,yi] = roipoly(...)
[x,y,BW,xi,yi] = roipoly(...)
roipoly(I,c,r)表示用向量c、r指定多边形各点的X、Y坐标。BW选中的区域为1,其他部分的值为0.
BW = roipoly(I)表示建立交互式的处理界面。
roipoly(x,y,I,xi,yi)表示向量x和y建立非默认的坐标系,然后在指定的坐标系下选择由向量xi,yi指定的多边形区域。
例子:I = imread('eight.tif');
c = [222 272 300 270 221 194];
r = [21 21 75 121 121 75];
BW = roipoly(I,c,r);
figure, imshow(BW)
图像处理函数详解——roifilt2
功能:用于对一个区域进行滤波。
用法:J = roifilt2(h,I,BW)
J = roifilt2(I,BW,fun)
J = roifilt2(I,BW,fun,P1,P2,...)
roifilt2(h,I,BW)表示使用滤波器h对图像I中用二值掩模BW选中的区域滤波。BW为和I大小相同的二值图像。
roifilt2(I,BW,fun,P1,P2,...)表示用fun函数处理区域滤波图像I。参数P1、P2等为fun函数的输入参数。
例子:I = imread('eight.tif');
c = [222 272 300 270 221 194];
r = [21 21 75 121 121 75];
BW = roipoly(I,c,r);
h = fspecial('unsharp');
%指定滤波器
J = roifilt2(h,I,BW);
imshow(J), figure, imshow(J)
图像处理函数详解——roifill
(ROI——region-of-interest)
功能:对指定区域进行填充。
用法:J = roifill(I,c,r)
J = roifill(I)
[J,BW] = roifill(...)
J = roifill(x,y,I,xi,yi)
[x,y,J,BW,xi,yi] = roifill(...)
J = roifill(I,c,r)
填充由向量c,r指定的多边形,c和r分别为多边形的各顶点X、Y坐标。可用于擦除图像中的小物体。
J = roifill(I)用于交互式处理界面。
roifill(I,BW)用BW(和I大小一致)掩模填充此区域。如果为多个多边形,则分别执行插值填充。
例子:I = imread('eight.tif');
c = [222 272 300 270 221 194];
r = [21 21 75 121 121 75];
J = roifill(I,c,r);
figure, imshow(J)
图像处理函数详解——roicolor
功能:可以根据颜色选定区域。
用法:BW = roicolor(A,low,high)
BW = roicolor(A,v)
BW = roicolor(A,low,high)色图范围为[low
high],返回这些像素选择区域。BW为大小和A相同的数组,若A中元素值在[low high]范围内,则返回值1,否则返回0.
roicolor(A,v)返回图像A中像素与向量v相匹配的区域,BW为二值图像,1值为A中与v相匹配的地方。
例子:I = imread('rice.png');
BW = roicolor(I,128,255);
imshow(I);
figure, imshow(BW)
matlab图像处理函数详解——rgb2gray
功能:将真彩色图像转换成灰度图像或者将彩色色图转换成灰度色图。
用法:I = rgb2gray(RGB)
newmap = rgb2gray(map)
I = rgb2gray(RGB) 将真彩色图像RGB转换成灰度图像I
newmap = rgb2gray(map)
将彩色色图map转换成灰度色图newmap
例子:X=imread(‘peppers.png’);
BW = rgb2gray(X);
imview(BW)
Matlab图像处理函数:regionprops
这里给出在Matlab图像处理工具箱中非常重要的一个图像分析函数:regionprops。顾名思义:它的用途是get the
properties of region,即用来度量图像区域属性的函数。语法STATS =
regionprops(L,properties)描述测量标注矩阵L中每一个标注区域的一系列属性。L中不同的正整数元素对应不同的区域,例如:L中等于整数1的元素对应区域1;L中等于整数2的元素对应区域2;以此类推。返回值STATS是一个长度为max(L(:))的结构数组,结构数组的相应域定义了每一个区域相应属性下的度量。properties
可以是由逗号分割的字符串列表、饱含字符串的单元数组、单个字符串 'all' 或者 'basic'。如果 properties
等于字符串 'all',则所有下述字串列表中的度量数据都将被计算,如果 properties 没有指定或者等于
'basic',则属性: 'Area', 'Centroid', 和 'BoundingBox'
将被计算。下面的列表就是所有有效的属性字符串,它们大小写敏感并且可以缩写。 属性字符串列表
图像处理函数详解——padarray
功能:填充图像或填充数组。
padarray(A,padsize,padval,direction)
A为输入图像,B为填充后的图像,padsize给出了给出了填充的行数和列数,通常用[r
c]来表示。padval和direction分别表示填充方法和方向。它们的具体值和描述如下:
  padval:'symmetric'表示图像大小通过围绕边界进行镜像反射来扩展;
&'replicate'表示图像大小通过复制外边界中的值来扩展;
&'circular'图像大小通过将图像看成是一个二维周期函数的一个周期来进行扩展。
direction:'pre'表示在每一维的第一个元素前填充;
&'post'表示在每一维的最后一个元素后填充;
&'both'表示在每一维的第一个元素前和最后一个元素后填充,此项为默认值。
若参量中不包括direction,则默认值为'both'。若参量中不包含padval,则默认用零来填充。若参量中不包括任何参数,则默认填充为零且方向为'both'。在计算结束时,图像会被修剪成原始大小。
&&&A = [1 2; 3
padarray(A,[3 2],'replicate','post')
图像处理函数详解——nlfilter
功能:用来执行通用的滑动邻域操作。
用法:B = nlfilter(A,[m n],fun)
B = nlfilter(A,[m n],fun,P1,P2,...)
B = nlfilter(A,'indexed',...)
B = nlfilter(A,[m
n],fun)表示对图像A的每一个m*n滑块应用函数fun。fun函数必须接受m*n块作为输入,并返回一个标量y,形如:
c=fun(x)
c为m*n块x的中心像素点的输入值。
例子:B = nlfilter(A,[3 3],@myfun);
其中myfun是以m文件如下:
function scalar = myfun(x)
scalar = median(x(:));
图像处理函数详解——montage
功能:在同一时间显示多帧图像中的所有帧。
用法:montage(I)
montage(BW)
montage(X,map)
montage(RGB)
h = montage(...)
montage(I)&&——显示灰度图像I共k帧,I为m*n*1*k的数组
montage(BW)
——显示二值图像I共k帧,I为m*n*1*k的数组
montage(X,map)——显示索引图像I共k帧,色图由map指定为所有的帧图像的色图,X为m*n*1*k的数组
montage(RGB)——显示真彩色图像GRB共k帧,RGB为m*n*3*k的数组
mri=uint8(zeros(128,128,1,27));
for frame=1:27
[mri(:,:,:,frame),map]=imread('mri.tif',frame);
%把每一帧读入内存中
montage(mri,map);
函数详解——mat2gray
功能:将矩阵转化为灰度图像。
用法:I = mat2gray(A,[amin
amax])& &&
&&&把一个double类的任意数组转换成取值范围为[0
1]的亮度图像。其中图像I的取值范围也在0(黑色)到1(白色)之间。参数amin和amax表示将A中小于amin的值转换为0,将A中大于amax的值转换为1。
mat2gray(A)& &&
&将矩阵A中实际最小值和最大值分别赋给amin和amax。
举例:I = imread('rice.png');
filter2(fspecial('sobel'),I);
mat2gray(J);
&&&imshow(I),
figure, imshow(K)
图像处理函数详解——imclose
功能:对图像实现闭运算,闭运算也能平滑图像的轮廓,但与开运算相反,它一般融合窄的缺口和细长的弯口,去掉小洞,填补轮廓上的缝隙。
用法:IM2 = imclose(IM,SE)
IM2 = imclose(IM,NHOOD)
用法和imopen相同,请在本论坛查找!
originalBW = imread('circles.png');
se = strel('disk',10);
closeBW = imclose(originalBW,se);
imview(closeBW)
图像处理函数详解——imopen
功能:对图像实现开运算,开运算一般能平滑图像的轮廓,消弱狭窄的部分,去掉细的突出。
用法:IM2 = imopen(IM,SE)
IM2 = imopen(IM,NHOOD)
imopen(IM,SE)用结构元素SE实现灰度图像或二值图像的IM的形态开运算。SE可以是单个结构元素对象或者结构元素对象数组。
imopen(IM,NHOOD)用结构元素strel(NHOOD)执行开运算。
I = imread('snowflakes.png');
se = strel('disk',5);
I_opened = imopen(I,se);
imview(I_opened,[])
图像处理函数详解——imerode
功能:对图像实现腐蚀操作,即膨胀操作的反操作。
用法:IM2 = imerode(IM,SE)
IM2 = imerode(IM,NHOOD)
IM2 = imerode(IM,SE,PACKOPT,M)
IM2 = imerode(...,PADOPT)
IM2 = imerode(IM,SE)
腐蚀灰度,二值,压缩二值图像IM,返回IM2。参数SE为由strel函数返回的结构元素或者结构元素对象组。
imerode(IM,NHOOD)腐蚀图像IM,这里NHOOD是定义结构元素邻域0和1的矩阵。
imerode(...,PADOPT)指出输出图像的大小(是否与输入图像大小一致)。
originalBW = imread('circles.png');
se = strel('disk',11);
erodedBW = imerode(originalBW,se);
imview(originalBW),
imview(erodedBW)
图像处理函数详解——imdilate
功能:对图像实现膨胀操作。
用法:IM2 = imdilate(IM,SE)
IM2 = imdilate(IM,NHOOD)
IM2 = imdilate(IM,SE,PACKOPT)
IM2 = imdilate(...,PADOPT)
IM2 = imdilate(IM,SE)
膨胀灰度,二值,压缩二值图像IM,返回IM2。参数SE为由strel函数返回的结构元素或者结构元素对象组。
imdilate(IM,NHOOD)膨胀图像IM,这里NHOOD是定义结构元素邻域0和1的矩阵。
imdilate(IM,SE,PACKOPT)定义IM是否是一个压缩的二值图像。
imdilate(...,PADOPT)指出输出图像的大小。
I = imread('cameraman.tif');
se = strel('ball',5,5);
I2 = imdilate(I,se);
imshow(I), title('Original')
figure, imshow(I2),
title('Dilated')
图像处理函数详解——imresize
功能:改变图像的大小。
用法:B = imresize(A,m)
B = imresize(A,m,method)
B = imresize(A,[mrows
ncols],method)
B = imresize(...,method,n)
B = imresize(...,method,h)
imrersize函数使用由参数method指定的插值运算来改变图像的大小。method的几种可选值:
'nearest'(默认值)最近邻插值
'bilinear'双线性插值
'bicubic'双三次插值
B = imresize(A,m)表示把图像A放大m倍
imresize(...,method,h)中的h可以是任意一个FIR滤波器(h通常由函数ftrans2、fwind1、fwind2、或fsamp2等生成的二维FIR滤波器)。
例子:I = imread('circuit.tif');
J =imresize(I,1.25);
%使用默认的最近邻插值法放大图像1.25倍
figure, imshow(J)
图像处理函数详解——imnoise
功能:模仿噪声信息,相当于图像的相加运算。
用法:J = imnoise(I,type)
J = imnoise(I,type,parameters)
参数Type对应的噪声类型如下:
'gaussian'高斯白噪声
'localvar'0均值白噪声
'poisson'泊松噪声
'salt & pepper'盐椒噪声
'speckle'乘性噪声
例子:I = imread('eight.tif');
J = imnoise(I,'salt &
pepper',0.02);
%密度0.02的盐椒噪声
figure, imshow(J)
图像处理函数详解——imhist
功能:显示图像的直方图。
&&&输入数据类型可以是无符号8位、16位、有符号16位、单精浮点、字符型、逻辑型等数据。
&&&imhist(I,n)&&计算和显示图像I的直方图,n为指定的灰度级数目,默认为256。如果I是二值图像,那么n仅有两个值。
&&&imhist(X,map)&&计算和显示索引图像x的直方图,map为调色板。
&&&[counts,x] =
imhist(...)&&返回直方图数据向量counts或相应的色彩值向量x。
&&&I=imread('rice.tif')
&&&imshow(I)
&&&figure,imhist(I)
图像处理函数详解——imfinfo
功能:获取图像文件的信息
用法:info = imfinfo(filename,fmt)
imfinfo(filename)
参数fmt对应于图像处理工具箱中所有支持的图像文件格式(如'bmp','jpg'等等)
例子:info = imfinfo('canoe.tif')
&Filename:'canoe.tif'
&& &FileModDate:
'25-Oct-:39'
&& &FileSize:
&&&Format:
FormatVersion: []
&& &Width:
&&&Height:
&& &BitDepth:
&&&ColorType:
&&&FormatSignature:
[73 73 42 0]
&&&ByteOrder:
'little-endian'
&NewSubfileType: 0
BitsPerSample: 8
&& &Compression:
'PackBits'
PhotometricInterpretation: 'RGB Palette'
&&&StripOffsets:
[9x1&&double]
&&&SamplesPerPixel:
&&&RowsPerStrip:
&&&StripByteCounts:
[9x1&&double]
&& &XResolution:
&& &YResolution:
&ResolutionUnit: 'Inch'
&& &Colormap:
[256x3&&double]
PlanarConfiguration: 'Chunky'
&&&TileWidth:
&& & TileLength:
&& &TileOffsets:
&TileByteCounts: []
&& &Orientation:
&&&FillOrder:
GrayResponseUnit: 0.0100
&MaxSampleValue: 255
&MinSampleValue: 0
&&&Thresholding:
图像处理函数详解——imcomplement
功能:对图像进行求反运算。
用法:IM2 = imcomplement(IM)
计算图像IM的负片。图像IM可以是二值图像、灰度图像、或者RGB图像。IM2和IM类型相同。
&& & X = uint8([
255 10 75; 44 225 100]);
imcomplement(X)
&245& &180
211& & 30&
imread('text.png');
&& & bw2 =
imcomplement(bw);
subplot(1,2,1),imshow(bw)
subplot(1,2,2),imshow(bw2)
imread('glass.png');
imcomplement(I);
&& & imshow(I),
figure, imshow(J)
图像处理函数详解——imapprox
功能:减少索引图像的色彩数,能够指定新色图的色彩数。即对索引图像进行近似处理。
用法:[Y,newmap] = imapprox(X,map,n)
[Y,newmap] = imapprox(X,map,tol)
Y = imapprox(X,map,newmap)
[...] = imapprox(...,dither_option)
[Y,newmap] =
imapprox(X,map,n)表示把索引图像和色图map进行最小值量化逼近。函数返回索引图像和新的色图newmap,色图至多有n种色彩。
[Y,newmap] = imapprox(X,map,tol)
表示把索引图像和色图map进行均衡量化逼近。新色图newmap至多有(floor(1/tol)+1)^3种色彩,tol的范围必须为[0,1.0]。
例子:[X, map] = imread('trees.tif');
[Y, newmap] = imapprox(X, map, 16);
imview(Y, newmap)
图像处理函数详解——imadjust
调节灰度图像的亮度或彩色图像的颜色矩阵。
imadjust(I,[low_ high_in],[low_ high_out],gamma)
将图像I中的亮度值映射到J中的新值,即将low_in至hige_in之间的值映射到low_out至high_out之间的值。low_in以下与high_in以上的值被剪切掉了,也就是说,low_in以下的值映射到low_out,high_in以上的值映射到high_out。它们都可以使用空的矩阵[],默认值是[0
&& & newmap =
imadjust(map,[low_in high_in],[low_out high_out],gamma)
调整索引色图像的调色板map。
&& & RGB2 =
imadjust(RGB1,[low_in high_in],[low_out high_out],gamma)
对RGB图像1的红、绿、蓝调色板分别进行调整。随着颜色矩阵的调整,每一个调色板都有唯一的映射值。
参数gamma指定了曲线的形状,该曲线用来映射I的亮度值。如果gamma小于1,映射被加权到更高的输出值。如果gamma大于1,映射被加权到更低的输出值。如果省略了函数的参量,则gamma默认为1(线性映射)。
&& & 调整灰度图像:K =
imadjust(I,[0.3 0.7],[]);
&&&figure,
调整RGB图像:RGB1 = imread('football.jpg');
imadjust(RGB1,[.2 .3 0; .6 .7 1],[]);
&&&imshow(RGB1),
figure, imshow(RGB2)
图像处理函数详解——imadd
功能:实现图像相加运算。
用法:Z = imadd(X,Y)
例子:I = imread('rice.png');
J = imread('cameraman.tif');
K = imadd(I,J,'uint16');
%转换数据类型,然后将图像相加
imshow(K,[])
图像处理函数详解——im2uint8
功能:将图像转换为8位无符号整型。也可将输出值限定在[0 255]内。
用法:I2 = im2uint8(I)
im2uint8(RGB)
im2uint8(BW)
im2uint8(X,'indexed')
reshape(uint8(linspace(0,255,255)),[5 5])
im2uint8(I)
图像处理函数详解——im2bw
功能:通过设定亮度将阈值灰度、真彩、索引图像转换为二值图像。
用法:BW = im2bw(I,level)
BW = im2bw(X,map,level)
BW = im2bw(RGB,level)
分别将灰度图像、索引图像、真彩色图像转换为二值图像。
Level是归一化的阈值,值域为[0,1]。Level可以由函数graythresh(I)来计算。
例子:load trees
BW = im2bw(X,map,0.4);
imview(X,map),imview(BW)
图像处理函数详解——histeq
功能:直方图均衡化。
histeq(I,hgram)&&将原始图像I的直方图变成用户指定的向量hgram。hgram中的各元素的值域为[0,1]。
histeq(I,n)&&指定直方图均衡后的灰度级数n,默认值为64。
&& & [J,T] =
histeq(I,...)&&返回从能将图像I的灰度直方图变换成图像J的直方图变换T。
&& & newmap =
histeq(X,map,hgram)
&& & newmap =
histeq(X,map)
&& & [newmap,T]
= histeq(X,...)&&
这三个是针对索引图像调色板的直方图均衡化,用法和灰度图像的一样。
imread('tire.tif');
histeq(I);
&& & figure,
图像处理函数详解——dither
功能:可以把真彩色图像装换成索引图像或者把灰度图像转换为二值图像。
用法:X = dither(RGB,map)
BW = dither(I)
X = dither(RGB,map,Qm,Qe)
dither(RGB,map)表示把真彩色图像RGB按指定的色图map抖动成索引图像X,但map不能超过65536种颜色。
BW = dither(I)
表示把灰度图像I抖动成二值图像BW
X = dither(RGB,map,Qm,Qe)
Qm表示沿每个颜色轴反转颜色图的量化的位数,Qe表示颜色空间计算误差的量化位数。如果Qe<Qm,则不进行抖动操作。默认值Qe=5,Qm=8
例子:I = imread('cameraman.tif');
BW = dither(I);
imview(BW)
图像处理函数详解——conv2
功能:是二维卷积运算函数(与convmtx2相似)。如果a和b是两个离散变量n1和n2的函数,则关于a和b的二维卷积运算数学公式如下:
用法:C = conv2(A,B)
C = conv2(hcol,hrow,A)
C = conv2(...,'shape')
conv2(A,B)计算数组A和B的卷积。如果一个数组描述了一个二维FIR滤波器,则另一个数组被二维滤波。当A的大小为[ma,na],B的大小为[mb,nb]时,C的大小为[ma+mb-1,mb+nb-1]。‘shape’见下表
默认值,返回全部二维卷积值。
返回与A大小相同卷积值的中间部分
当all(size(A)&=size(B)),C的大小为[ma+mb-1,mb+nb-1];否则,C返回[]。在n维卷积运算中,C的大小为max(size(A)-
size(B)+1,0)
s = [1 2 1; 0 0 0; -1 -2 -1];
A = zeros(10);
A(3:7,3:7) = ones(5);
H = conv2(A,s);
图像处理函数详解——colfilt
功能:以列方法进行邻域处理,也可执行常规非线性滤波(自己理解的)。
用法:B = colfilt(A,[m
n],block_type,fun)
   该函数生成了一幅图像A,在A中,每一列对应于其中心位于图像内某个位置的邻域所包围的像素。然后将函数应用于该矩阵中。[m
n]表示大小为m行n列的邻域。block_type表示了一个字符串,包括'distinct','sliding'两种,其中'sliding'是在输入图像中逐个像素地滑动该m乘n的区域。fun表示引用了一个函数进行处理,函数返回值的大小必须和原图像大小相同。
举例:I = imread('tire.tif');
&&&imshow(I)
uint8(colfilt(I,[5 5],'sliding',@mean));
&&&figure,
imshow(I2)
图像处理函数详解——bwperim
功能:查找二值图像的边缘。
用法:BW2 = bwperim(BW1)
BW2 = bwperim(BW1,conn)
bwperim(BW1,conn)表示从输入图像BW1中返回只包括对象边缘像素点的图像。
conn的定义值如下:
BW1 = imread('circbw.tif');
BW2 = bwperim(BW1,8);
imshow(BW1)
figure, imshow(BW2)
图像处理函数详解——bwlabel
功能:对连通对象进行标注,bwlabel主要对二维二值图像中各个分离部分进行标注(多维用bwlabeln,用法类似)。
用法:L = bwlabel(BW,n)
[L,num] = bwlabel(BW,n)
bwlabel(BW,n)表示返回和BW相同大小的数组L。L中包含了连通对象的标注。参数n为4或8,分别对应4邻域和8邻域,默认值为8。
[L,num] = bwlabel(BW,n)返回连通数num
图像处理函数详解——bwareaopen
功能:用于从对象中移除小对象。
用法:BW2 = bwareaopen(BW,P)
BW2 = bwareaopen(BW,P,CONN)
bwareaopen(BW,P,CONN)从二值图像中移除所有小于P的连通对象。CONN对应邻域方法,默认为8。
originalBW = imread('text.png');
imview(originalBW)
bwAreaOpenBW =
bwareaopen(originalBW,50);
imview(bwAreaOpenBW)
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。基于模糊理的图像分割算法研究
您现在的位置:&>&&>&&>&
基于模糊理的图像分割算法研究
&&& &&&&&&&&&
育龙网:图像分割边缘检测模糊理论遗传算法Matlab分割的目的是将图像划分为不同区域。图像分割算法一般是基于亮度值的两个基本特性之一:不连续性和相似性。第一
图像分割边缘检测模糊理论遗传算法Matlab分割的目的是将图像划分为不同区域。图像分割算法一般是基于亮度值的两个基本特性之一:不连续性和相似性。第一类性质的已用途径是基于亮度的不连续变化分割图像,比如图像的边缘。第二类的主要应用途径是依据事先制订的准则将图像分割为相似的区域。门限处理、区域生长、区域分离和聚合都是这类方法的实例。遗传算法具有简单、鲁棒性好和本质并行的突出优点。其在应用领域取得的巨大成功,引起了广大学者的关注。在图像分割领域,遗传算法常用来帮助确定分割阈值。第一章绪论1.1图像分割综述图像分割就是指把图像分成各具特性的区域并提取出感兴趣目标的技术和过程。这里所说的特性可以是灰度、颜色、纹理等,而目标可以对应单个区域,也可以对应多个区域。图像分割是数字图像处理中的一项关键技术,它使得其后的图像分析,识别等高级处理阶段所要处理的数据量大大减少,同时又保留有关图像结构特征的。而且,在数字图像处理工程中,一方面,图像分割是目标表达的基础,对特征测量有重要的影响;另一方面,图像分割是自动目标识别的关键步骤,图像分割及其基于分割的目标表达、特征提取和参数测量等将原始图像转化为更抽象更紧凑的形式,分割中出现的误差会传播至高层次处理阶段,因此分割的精确程度是至关重要的。只有通过细致精细的图像分割,才能使得更高层的图像分析和理解成为可能。因此,图像分割是由图像处理进到图像分析的关键步骤,在图像工程中占据重要的位置。1.2图像分割的研究意义与发展现状作为计算机视觉和图像处理中的难点和热点之一,图像分割的研究受到了研究工的高度重视,对图像分割进行了深入、广泛的研究。作为一种重要的图像技术,图像分割在不同领域中有时也用其它名称:如目标轮廓技术,阈值化技术,图像区分或求差技术,目标检测技术,目标识别技术,目标跟踪技术等,但这些技术本身或其核心实际上也就是图像分割技术。图像分割作为图像处理、分析的一项基本内容,其应用非常广泛,几乎出现在有关图像处理的所有领域,并涉及各种类型的图像。在工业自动化、在线产品检验、生产程控、文件图像处理、遥感图像、保安监视、以及军事、体育、农业等行业和工程中,图像分割都有着广泛的应用。例如:在遥感图像中,合成孔径雷达图像中目标的分割、遥感云图中不同云系和背景分布的分割等;在医学应用中,脑部MR图像分割成灰质、白质、脑脊髓等脑组织和其它脑组织区域等;在交通图像分析中,把车辆目标从背景中分割出来等;在面向对象的图像压缩和基于内容的图像检索中将图像分割成不同的对象区域等。在各种图像应用中,只要需对图像目标进行提取,测量等都离不开图像分割。自20世纪70年代至今,已提出上千种各种类型的分割算法。如:门限法、匹配法、区域生长法、分裂-合并法、水线法、马尔可夫随机场模型法、多尺度法、小波分析法、数学形态学等。随着新理论、新技术的发展,一些新的图像分割方法也随之出现,但这些分割算法都是针对某一类型图像、某一具体的应用问题而提出的,并没有一种适合所有图像的通用分割算法。通用方法和策略仍面临着巨大的困难。另外,还没有制定出选择适用分割算法的标准,这给图像分割技术的应用带来许多实际问题。1.3本所作的工作据此,在本中只对常用的、并在实践中行之有效的边缘检测方法和阈值分割方法进行深入的了解,并对阈值分割方法中的灰度直方图双峰法和基于遗传算法的最大类间方差法进行详细的讨论,同时用Matlab对上述两种方法进行验证并给出结果。1.4本的论述内容1.对本文所采用的试验测试工具Matlab进行简介。2.简介数字图像的基础问题。概述了数字图像的基本概念和特点,简介了各种图像格式的特点和应用,为全文的讨论作一铺垫。3.详细讨论了图像分割中的基于阈值的图像分割方法,给出了直方双峰法的算法和验证结果,并简要介绍了普通最大类间方差法的算法过程。4.对遗传算法理论进行简介。详细讨论了遗传算法的定义和标准遗传算法的流程和要素。为应用此方法对最大阈值进行迭代寻优打下基础。6.应用遗传算法改进了最大类间方差法。给出了整个遗传操作的使用函数与具体进程,并对实例图片进行处理,得到处理结果并得到迭代最优阈值M。第二章Matlab简介2.1MATLAB的概况和产生背景2.1.1MATLAB的概况MATLAB是矩阵实验室之意。除具备卓越的数值计算能力外,它还提供了专业水平的符号计算,文字处理,可视化建模仿真和实时控制等功能。MATLAB的基本数据单位是矩阵,它的指令表达式与数学,工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完相同的事情简捷得多.当前流行的MATLAB包括拥有数百个内部函数的主包和三十几种工具包.工具包又可以分为功能性工具包和学科工具包.功能工具包用来扩充MATLAB的符号计算,可视化建模仿真,文字处理及实时控制等功能.学科工具包是专业性比较强的工具包,控制工具包,信号处理工具包,通信工具包等都属于此类.开放性使MATLAB广受用户欢迎.除内部函数外,所有MATLAB主包文件和各种工具包都是可读可修改的文件,用户通过对源程序的修改或加入自己编写程序构造新的专用工具包.2.1.2MATLAB产生的历史背景在70年代中期,CleveMoler博士和其同事在美国国家科学基金的资助下开发了调用EISPACK和LINPACK的FORTRAN子程序库.EISPACK是特征值求解的FOETRAN程序库,LINPACK是解线性方程的程序库.在当时,这两个程序库代表矩阵运算的最高水平.到70年代后期,身为美国NewMexico大学计算机系系主任的CleveMoler,在给学生讲授线性代数课程时,想教学生使用EISPACK和LINPACK程序库,但他发现学生用FORTRAN编写接口程序很费时间,于是他开始自己动手,利用业余时间为学生编写EISPACK和LINPACK的接口程序.CleveMoler给这个接口程序取名为MATLAB,该名为矩阵和实验室两个英文单词的前三个字母的组合.在以后的数年里,MATLAB在多所大学里作为教学辅助软件使用,并作为面向大众的免费软件广为流传。1983年春天,CleveMoler到Standford大学讲学,MATLAB深深地吸引了工程师JohnLittle.JohnLittle敏锐地觉察到MATLAB在工程领域的广阔前景.同年,他和CleveMoler,SteveBangert一起,用C语言开发了第二代专业版.这一代的MATLAB语言同时具备了数值计算和数据图示化的功能.1984年,CleveMoler和JohnLittle成立了MathWorks公司,正式把MATLAB推向市场,并继续进行MATLAB的研究和开发.在当今30多个数学类科技应用软件中,就软件数学处理的原始内核而言,可分为两大类.一类是数值计算型软件,如MATLAB,Xmath,Gauss等,这类软件长于数值计算,对处理大批数据效率高;另一类是数学分析型软件,Mathematica,Maple等,这类软件以符号计算见长,能给出解析解和任意精确解,其缺点是处理大量数据时效率较低.MathWorks公司顺应多功能需求之潮流,在其卓越数值计算和图示能力的基础上,又率先在专业水平上开拓了其符号计算,文字处理,可视化建模和实时控制能力,开发了适合多学科,多部门要求的新一代科技应用软件MATLAB.经过多年的国际竞争,MATLAB以经占据了数值软件市场的主导地位.在MATLAB进入市场前,国际上的许多软件包都是直接以FORTRANC语言等编程语言开发的。这种软件的缺点是使用面窄,接口简陋,程序结构不开放以及没有标准的基库,很难适应各学科的最新发展,因而很难推广。MATLAB的出现,为各国科学家开发学科软件提供了新的基础。在MATLAB问世不久的80年代中期,原先控制领域里的一些软件包纷纷被淘汰或在MATLAB上重建。时至经过MathWorks公司的不断完善,MATLAB已经发展成为适合多学科,多种工作平台的功能强大大大型软件。在国外,MATLAB已经经受了多年考验。在欧美等高校,MATLAB已经成为线性代数,自动控制理论,数理统计,数字信号处理,时间序列分析,动态系统仿真等高级课程的基本教学工具;成为攻读学位的大学生,硕士生,博士生必须掌握的基本技能。在设计研究单位和工业部门,MATLAB被广泛用于科学研究和解决各种具体问题。在国内,特别是工程界,MATLAB一定会盛行起来。可以说,无论你从事工程方面的哪个学科,都能在MATLAB里找到合适的功能。2.2MATLAB的语言特点一种语言之所以能如此迅速地普及,显示出如此旺盛的生命力,是由于它有着不同于其他语言的特点,正如同FORTRAN和C等高级语言使人们摆脱了需要直接对计算机硬件资源进行操作一样,被称作为第四代计算机语言的MATLAB,利用其丰富的函数资源,使编程人员从繁琐的程序代码中解放出来。MATLAB最突出的特点就是简洁。MATLAB用更直观的,符合人们思维习惯的代码,代替了C和FORTRAN语言的冗长代码。MATLAB给用户带来的是最直观,最简洁的程序开发环境。以下简单介绍一下MATLAB的主要特点。1.语言简洁紧凑,使用方便灵活,库函数极其丰富。MATLAB程序书写形式自由,利用起丰富的库函数避开繁杂的子程序编程任务,压缩了一切不必要的编程工作。由于库函数都由本领域的专家编写,用户不必担心函数的可靠性。可以说,用MATLAB进行科技开发是站在专家的肩膀上。更为难能可贵的是,MATLAB甚至具有一定的智能水平,所以用户根本不用怀疑MATLAB的准确性。2.运算符丰富。由于MATLAB是用C语言编写的,MATLAB提供了和C语言几乎一样多的运算符,灵活使用MATLAB的运算符将使程序变得极为简短。3.MATLAB既具有结构化的控制语句大学设计推出的。相对于其他版本的遗传算法工具箱,如:美国北卡莱罗纳州立大学推出的遗传算法优化工具箱GAOT,以及MathWorks公司最新发布的一个专门设计的Matlab遗传算法和直接搜索工具箱,本工具箱的出现最早,影响较大且功能较为完备。文中所采用的所有遗传操作函数大部分出自本工具箱。第三章数字图像基础简介图像处理的首要一步,就是要了解图像的基本性质与特点。只有充分了解和掌握了所要处理得图像的特点和性质,才能在接下来的处理中根据图像的特点获取所需的,并对其进行相应的处理。本章将介绍数字图像的基础知识,以及图像在计算机处理中的表达形式,并对几种常用的图像文件格式Bmp,Jpeg以及Png等做简要的介绍。3.1图像的基本概念及其特点要对图像进行处理,必须清楚图像的概念。一般来说,二维或三维景物呈现在人眼中的样子就是图像。图像具有以下三个方面的特点:①图像带有大量的,一幅图像顶得上千言万语;②图像种类繁多,包括照片、绘图视频图像等;③人类从外界获得的大部分来自视觉系统。人们看到的任何自然界的图像都是连续的模拟图像。其形状和形态表现由图像各位置的颜色来决定。可以用f(x,y)表示一幅模拟图像,其中x,y表示空间坐标点的位置,f表示图像在点的某种性质的数值,如亮度、颜色等,f、x、y可以是任意的实数。而把连续空间的图像在坐标空间和性质空间F都离散化,以便于计算机进行加工处理的离散化的图像则称为数字图像。数字图像用I来表示,其中:r=row为行,c=col为列,表示空间离散点的坐标,I表示离散化的图像f。I,r,c都是整数。实际中仍习惯用f表示数字图像。图像存储画面的形式为栅格结构:即将图像划分为均匀分布的栅格,显式的记录每一像素的亮度和颜色;而将像素的坐标值规则地隐含起来,其位置排列规则,通常为矩形排列。3.2图像的格式组成数字图像的基本单位称为像素,把像素按不同的方式进行组织和存储,就得到不同的图像格式;把图像数据存为文件就得到图像文件。图像文件按其格式的不同一般具有不同的扩展名。常用的图像文件格式有位图文件、JPEG文件、GIF文件、PNG文件等。每一种格式都有它的特点和用途,在选择输出的图像文件格式时,应考虑图像的应用目的以及图像文件格式对图像数据类型的要求。下面我们介绍几种常用的图像文件格式及其特点。3.2.1BMP图像格式这是一种DOS和Windows兼容计算机系统的标准图像格式。BMP格式支持索引色、灰度等色彩模式。图像存储为BMP格式时,每一个像素所占的位数可以是1位、4位、8位或32位,相对应的颜色数也从黑白一直到真彩色。对于使用Windows格式的4位和8位图像,可以指定采用RLE压缩。BMP图像文件含文件头、调色板数据和图像数据三个层次。其中文件头由定义文件标识、大小即图像数据偏移量的BITMAPF工LEHEADER以及指定BMP图像自身的若干参数的BITMAPINFOHEADER两部分组成。这种格式在PC机上应用非常普遍。3.2.2JPEG图像格式JPEG是由联合照片专家组开发的一种图像文件格式。它采用有损压缩方式去除冗余的图像和彩色数据,在获取极高的压缩率的同时也能展现十分丰富生动的图像。也就是说,可以用较少的磁盘空间得到较好的图像质。另外,JPEG还是一种比较灵活的格式,当将图像保存为JPEG格式时,允许用户用不同的压缩比例对文件进行压缩,就是可以指定图像的品质和压缩级别。3.2.3TIFF图像格式TIFF文件主要由三部份组成,包括文件头、标识区和图像数据区。T工FF文件的图像数据区以行扫描的方式存取图像,存储图像前先将图像分割成若干部分,压缩后再存储。存储时,单色图像一个字节存储8个点,16色图像一个字节2个点,而256色图像就是一个字节存储一个点。TIFF图像格式是一种应用非常广泛的位图图像格式,几乎被所有绘画、图像和页面排版应用程序所支持。TIFF格式常常用于在应用程序之间和计算机平台之间交换文件。3.2.4GIF图像格式CIF是GraphicsInterchangeFormat的缩写,是由ComputerServe公司推出的一种图像格式。该种图像格式的特点是压缩比高,可以极大地节省存储空间。最初的GIF只是简单的用来存储单幅静止图像,后来可以同时存储若干幅静止图像从而形成连续的动画;同时,GIF格式支持透明背景,可以较好地与网页背景融合在一起。因此,GIF常常用于保存作为网页数据进行传输的图像文件,成为网络和BBS上使用频率较高的一种图像文件格式。但是GIF最多只能处理256种色彩,不能用于存储真彩色的图像文件。3.2.5PNG图像格式这种格式称为可移植网络图像文件格式,由ThomasBoutell,TomLan。等人提出并设计。其特点是:①支持48位真彩色图像、16位灰度图像和颜色索引数据图像;②主要面向网络图像传输和图像,其提供的二维交叉存储机制使用户在图像网络传输过程中能更快的观察到接近真实的近似图像;③对用户完全透明且无专利限制,用户可以从Internet上随时与PNG文件格式配套的图像数据压缩算法源程序代码:④具有比GIF高520%的压缩效率;⑤具有可扩展性。作为目前最不失真的图像格式,PNG格式图像吸取了GIF和JPEG二者的优点。它可以把文件压缩到极限以利于网络传输,但由于采用无损压缩方式来减少文件大小,PNG格式能保留所有与图像品质有关的。同时,PNG支持图像背景透明,显示速度快。本文的所有图像的处理都是对由JPG格式图像通过图像格式转化得来的Bmp格式的索引色图像进行的,其具体转换程序参见附录。第四章图像分割4.1图像分割算法的定义与分类在图像的研究和应用中,人们往往只对一幅图像中的某些部分感兴趣,这些感兴趣的部分一般对应图像中特定的、具有特殊性质的区域,称之为目标或前景;而其它部分称为图像的背景。为了辨识和分析目标,需要把目标从一幅图像中孤立出来,这就是图像分割要研究的问题。所谓图像分割,从广义上来讲,是根据图像的某些特征或特征集合的相似性准则对图像象素进行分组聚类,把图像平面划分成若干个具有某些一致性的不重叠区域。这使得同一区域中的象素特征是类似的,即具有一致性;而不同区域间象素的特征存在突变,即具有非一致性。从集合的角度出发,图像分割定义如下:设整个图像空间为一集合R。根据选定的一致性准则P,R被划分为互不重叠的非空子集:,这些子集必须满足下述条件:R=对于所有的i和j,当i≠j,=空集P=True,对所有的i所有i≠j;Ri,Rj相邻,P=False对i=1,2,L,n,Ri是连通区域其中:P为作用于Ri中所有象素的形似性逻辑谓词,i,j=1,2,L,…n。上述条件指出分割后的全部子区域的总和应包含图像中的所有元素,或者说分割应将图像中每个象素都分进一个子区域中。指出各个子区域相互不重叠。指出分割后得到的属于同一区域中的元素应该具有某种相同特性。指出对于分割后得到的属于相邻两个区域中的元素具有某种不同的特性。要求同一个子区域内的元素应当是连通的。其中分割准则P适用于所有象素,由它来确定各区域元素的相同特性。上述数学条件说明了图像分割算法的一些特点,凡不符合以上特点的图像处理算法则不能称为图像分割算法。目前,在己提出的多种类型的分割算法中,大致可以分为基于边缘检测的方法和基于区域的方法。而在实际应用中,这些方法主要又可划分为三种类型:边缘检测型、阈值型和区域跟踪型。本文的讨论正是基于阈值型图像分割方法展开的。4.2基于阈值的分割4.2.1方法定义与特点基于阈值的分割方法是一种应用十分广泛的图像分割技术。所谓阈值分割方法的实质是利用图像的灰度直方图得到用于分割的阈值。它是用一个或几个阈值将图像的灰度级分为几个部分,认为属于同一个部分的象素是同一个物体。它不仅可以极大的压缩数据量,而且也大大简化了图像的分析和处理步骤。因此,在很多情况下,是进行图像分析、特征提取与模式识别之前必要的图像预处理过程。它特别适用于目标和背景占据不同灰度级范围的图像。阈值分割方法的最大特点是计算简单,运算效率高,在重视运算效率的应用场合,它得到了广泛的应用。4.2.2阈值的分割的描述设是二维数字图像的平面坐标,图像灰度级的取值范围是G=,位于坐标点上的像素点的灰度级表示为f。设t∈G为分割阈值,B=代表一个二值灰度级,并且b0,b1∈B。于是图像函数f1在阈值t上的分割结果可以表示为:阈值分割法实际就是按某个准则函数求最优阈值t的过程。域值一般可写成如下的形式:T=T[x,y,f,p]其中f是在像素点处的灰度值,p是该点邻域的某种局部性质。4.3.3阈值分割方法的分类通过上文的讨论,结合所给公式,可以将阈值分割方法分为以下3类:1)全局阈值:T=T,阈值与图像像素的本身性质和局部区域性质相关。3)动态阈值:T=T,阈值与像素坐标,图像像素的本身性质和局部区域性质相关。全局阈值对整幅图像仅设置一个分割阈值,通常在图像不太复杂、灰度分布较集中的情况下采用;局部阈值则将图像划分为若干个子图像,并对每个子图像设定局部阈值;动态阈值是根据空间和灰度确定。局部阈值分割法虽然能改善分割效果,但存在几个缺点:1)每幅子图像的尺寸不能太小,否则统计出的结果无意义。2)每幅图像的分割是任意的,如果有一幅子图像正好落在目标区域或背景区域,而根据统计结果对其进行分割,也许会产生更差的结果。3)局部阈值法对每一幅子图像都要进行统计,速度慢,难以适应实时性的要求。全局阈值分割方法在图像处理中应用比较多,它在整幅图像内采用固定的阈值分割图像。考虑到全局阈值分割方法应用的广泛性,本文所着重讨论的就是全局阈值分割方法中的直方图双峰法和基于遗传算法的最大类间方差法。在本节中,将重点讨论灰度直方图双峰法,最大类间方差法以及基于遗传算法的最大类间方差法留待下章做继续深入地讨论。4.2.3直方图双峰法Prewitt等人于六十年代中期提出的直方图双峰法是典型的全局单阈值分割方法。该方法的基本思想是:假设图像中有明显的目标和背景,则其灰度直方图呈双峰分布,如图所示:当灰度级直方图具有双峰特性时,选取两峰之间的谷对应的灰度级作为阈值。如果背景的灰度值在整个图像中可以合理地看作为恒定,而且所有物体与背景都具有几乎相同的对比度,那么,选择一个正确的、固定的全局阈值会有较好的效果。例如图4.1所示:当选定阈值M为100时,分割效果如下:通过对上示图片的比照,对于简单的,背景图像和目标图像对比鲜明的图片,我们很容易通过其灰度直方图找到分割用的阈值,从而将图像按照灰度的不同区分开来。这种方法虽然简单易行,但是因为同一个直方图可能对应若干种不同的图像,所以使用双峰法需要有一定的图像先验知识,而且该方法不适合用于直方图中的双峰差别很大或双峰之间的谷部较宽广而平坦或者只有单峰的图像。例如,在对于下示图4.4,图4.7,图片的处理:图片4.5的直方图平坦,无法找出两峰之间的峰谷。图片4.8的直方图的各峰差别大,无法通过峰谷判定阈值。因此,阈值的难以确定,导致对这两幅图片采用灰度直方图法的失败:由于图片4.5直方图的平坦,无法找出两峰之间的峰谷,而图片4.8的直方图各峰差别很大,导致图片4.5和图片4.8都无法获得足够的图像先验知识,从而使本方法的使用遇到困难,阈值的寻找困难直接导致在采用本方法处理图片后,分割后的图像与原图像的差别很不明显,并未达到实际的分割效果。因此,本方法的使用的局限性很大,只适于对一些简单的背景和目标图像的灰度差别很大的图像的处理,,而且不便于阈值的自动选择,无法完全自动的有程序实现。第五章模糊理论和遗传算法理论简介传统的处理方法建立在概率假设和二态假设(ProbalityAssumptionBinaryStateAssumption)的基础上。概率假设使传统的数学应用范围从确定性现象扩展到随机现象,二态假设对应了人类的精确思维方式。但自然界客观存在的事物除了可以精确表示之外,还存在着大量的模糊现象,如“年轻人”、“高个子”等,究竟多大年龄之间算“年轻’,,多高个子为“高个子”,这是人们观念中的模糊的概念,模糊概念由此产生。模糊性也就是生活中的不确定性。实际上客观事物的不确定性除了随机性外,模糊性也是一种不确定性。所谓模糊性是指事物的性质或类属的不分明性,其根源是事物之间存在过渡性的事物或状态,使它们之间没有明确的分界线。在自然科学中,人们长久以来习惯于追求精确性,总希望把事物以数学方式描述出来,然而,面对模糊现象,传统的数学方法遇到了实质性的困难。但对于人的大脑而言,它具有很高的模糊划分、模糊判断和模糊推理的能力,而且人们为了表达和传递知识所采用的自然语言中已巧妙地渗透了模糊性,并能用最少的词汇表达尽可能多的。但是,对于计算机来说,无论它怎样发展,总无法达到人脑的境界,所以,用计算机来处理模糊,就需要一种能够将模糊语言形式化的工具,用数学的方式处理这种模糊性。模糊数学的一个重要特点,就是让数学反过来吸收人脑的模糊识别和判决特点,并将之运用于计算机,使部分自然语言能够作为算法语言直接进入程序,让机器通过模仿生物的思维判别模式,使人们能够以简易的程序来调动机器完成复杂的任务,从而大大提高机器的灵活性。人工智能,计算生命,遗传算法等前沿学科正是模糊数学理论发展的结果。在面对工程领域中大量的无法采用传统优化方法解决的复杂的、非线性的优化问题时,遗传算法作为模糊数学理论中重要的一支,因其具有简单、通用,鲁棒性强,且易于并行性的特点,而广泛应用于工程设计的优化,系统辨识和控制,机器学习,图像处理和智能处理等领域。5.1遗传算法的基本概念遗传算法是模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算模型,由Michigan大学的J.Holland教授于1975年首先提出。它将“适者生存”的进化理论引入串结构,并且在串之间进行有组织但又随机的交换。通过遗传操作,使优良品质被不断保留、组合,从而不断产生出更佳的个体。子代个体中包含父代个体的大量,并在总体上胜过父代个体,从而使种群向前进化发展,即不断接近最优解。由于遗传算法是自然遗传学和计算机科学相互结合渗透的产物,因此借用了许多自然进化的基础术语。种群和个体遗传算法处理的是染色体,或者叫基因型个体,通常以一维串结构资料来表现。一定数量的个体组成了种群,或叫集团。种群规模种群中个体的数目称为种群大小,也叫种群规模。适应度函数各个个体对环境的适应程度叫做适应度。对于优化问题,适应度函数就是目标函数。遗传算法对适应度函数并不要求可导等条件,只要求适应度函数为可加以比较的非负函数。编码、译码操作遗传算法必须包含两个必须的资料转换操作,即把搜索空间中的参数或解转换成遗传空间中的染色体或个体,称为编码操作;反之,称为译码操作。选择、交叉和变异操作这三个操作数是遗传算法的三个主要操作操作数,即遗传操作5.2遗传算法5.2.1遗传算法的基本流程标准遗传算法的基本流程如图所示,算法主要步骤如下图5.1示:1)随机产生初始种群,作为第一代。个体长度、种群规模、交叉概率、变异概率为固定值;2)对父代种群计算适应度值;3)判断是否满足终止条件,是,则执行步骤4:否则,进行选择、交叉、变异操作形成子代种群,并将子代种群作为下一次叠代的父代种群,转入执行步骤2;4)输出最佳个体,退出。5.2.2遗传算法的要素遗传算法具有5个基本要素:编码机制,初始种群的设定,适应度函数的设定,遗传操作,控制参数的设定。具体步骤如下:1.编码机制编码机制是遗传算法的基础。通常遗传算法不直接处理问题空间的资料,而是将各种实际问题变换为与问题无关的串个体。对染色体串的遗传操作只与遗传算法的理论、技术有关,而与具体实际问题无关。这一特性增大了遗传算法的适用性。当实际问题变化时,可只改变适应度函数,而无需改变其它操作,加强了代码的通用性。最常用的方法是二进制串结构编码。2.初始化种群设定遗传算法处理流程中,编码设计之后的任务是初始种群的设定,并以此为起点一代一代的进化直到按照某种进化终止准则终止。最常用的初始方法是无指导的随机初始化。3.适应度函数遗传算法在搜索过程中基本不采用外部,仅以适应度函数为依据引导搜索。它不受连续可微的约束且定义域可为任意集合。对目标函数的唯一要求是,对输入计算出能加以比较的非负结果。这使得遗传算法的应用范围非常广泛。个体的适应度值越大,表明该个体的生存能力越大,易于遗传产生后代。4.遗传操作遗传操作主要包括:选择、交叉、变异mutation)三个操作数。1)选择选择过程是模仿自然选择现象,从父代种群中选出优良个体。个体的适应度值越大,在子代中将有更多的机会作为父代产生一个或多个子代个体。通常选用适应度比例法确定选择次数,该法中的各个体选择概率和其适应度值成比例。2)交叉最简单的交叉操作为单点交叉:首先,对父代个体进行随机配对;然后,配对个体随机设定交叉位置;最后,交换配对个体的部分。当染色体长度为l时,l1有个交叉位置,单点交叉可实现l1种不同的交叉结果。父代个体A1100新个体A’父代个体B1011新个体B’3)变异变异操作随机选择变异基因序号,根据一定的变异概率Pm对该序号基因进行变异。对于二进制编码个体通常采用0变为l,1变为0。1变异位5.控制参数控制参数主要有:种群规模、迭代次数、交叉概率、变异概率等。对此标准遗传算法都设为固定值。标准遗传算法的特点是:1)轮盘赌选择方法:2)随机配对;3)单点交叉,生成两个子代个体:4)种群内允许相同个体出现。可见,遗传算法从任一初始化种群出发,通过选择,交叉,变异操作种群一代一代的进化到搜索空间中最优点附近,直至收敛到最优解点。遗传算法不是直接作用在问题空间中,而是编码空间中,而且遗传操作非常简单。这使得遗传算法具有了简单,通用,鲁棒性强的特点。第六章基于遗传算法的最大类间方差分割法6.1普通最大类间方差法简介由Otsu于1978年提出的最大类间方差法以其计算简单、稳定有效而一直广为使用。该方法又称为大津阈值分割法,是在判决分析最小二乘法原理的基础上推导得出的,算法较为简单。此方法由于其简便性和分割准确性在图像分割中被大量采用,但是缺点在于与,与后文所述的基于遗传算法最大类间方差法相比,要求得最佳阈值,需要遍历灰度范围0~L1内的所有像素并计算方差,最后比较得出最大方差,计算量大同时效率也很低,运算时间偏长。鉴于本文着重讨论遗传算法最大类间方差法,因此对于普通最大类间方差法讨论只作简介,详细内容参阅参考文章。基本思路:选取的最佳阈值t应当使得不同类间的分离性最好。首先计算基于直方图得到各分割特征值的发生概率,并以阈值变量t将分割特征值分为两类,然后求出每一类的类内方差及类间方差,选取使得类间方差最大,类内方差最小的t作为最佳阈值。具体步骤如下:设原始灰度图像灰度级为L,灰度级为i的象素点数目为ni,则图像的全部象素数为按阈值t可将所有象素划分两类:C0=和C1=。而C0和C1类的类出现概率w及均值μ分别由下列各式给出:式中:不难得出,对任何t值,下式都能成立:C0和C1类的方差可由下式求得:定义类内方差σw、类间方差σB、总体方差σT为:引入则最佳阈值t*可选择为:在图像处理过程中,原有的图像分割方法都不可避免的会产生误差,这些误差会影响到图像处理和识别的效果。如何使这些误差最小是使计算机视觉达到实用化的重要要求。遗传算法其固有的并行性和不易陷入局部最优的特点使之非常适于大规模搜索空间的寻优,因此,己广泛应用于图像处理领域。图像分割是一个在复杂的参量空间中寻找最优分割参量的问题,遗传算法可以有效的寻找参量空间的全局最优值,从而为解决图像分割中的参量选择难题提供了有力的保证。本章将着重讨论基于遗传算法的最大类间方差分割法在图像分割中的应用。6.2最大类间方差图像分割的遗传算法描述正如前文所述,最大类间方差的求解过程就是在解空间中找到一个最优解,使得类间方差最大。为了改进普通最大类间方差法,采用遗传算法,求其寻找最优解的过程进行改进。遗传算法的最大类间方差法步骤如下:1)建立初始种群并编码。在Matlab中,通过函数crtbp建立初始种群,在0~255之间以同等概率随机产生初始种群,通常初始种群的规模选取不易过大。随机的在0~255之间以同等概率生成40个个体A1~A40作为第一次寻优的初始的种群。通过函数bs2rv进行二进制码和实值的转变。因为图像的灰度级在0~255之间,所以将染色体编码成8位二进制码,它代表某个阈值。2)适应度函数计算各个体的适应度值。采用公式P1=S1/I;P2=S2/JF=I*J**/作为适应度函数对个体进行适应度计算。式中,F为适应度函数;I为目标图像的像素数J为背景图像的像素数;S1为目标图像的像素和,S2为背景图像的像素和。3)选择::与标准遗传算法略有不同,本例未采用轮盘赌方法进行选择操作,而是以Matlab中的高级函数select作为选择程序。在这种方法中,需要设定代沟,即整个种群在每一代中没有完全被复制,有部分剩余。本例设代沟GGAP=0.9,即每次遗传后子代数量为父代的90%。。4)交叉:在Matlab中使用高级函数recombin实现。即在当前种群中每次选取两个个体按设定的交叉概率进行交叉操作,生成新的一代种群;。5)变异:在Matlab中使用函数mut实现。即根据一定的变异概率Pm,选取当前种群的每一行对应一个个体并用概率Pm变异每一个元素,从而形成新一代群体。6)终止本程序中选择指定代数作为寻优循环跳出的判断条件。判断跳出条件是否满足,若不满足,则以新生成的群体作为第一代群体,转到步骤3继续寻优,否则转到步骤7。7)将最后一代群体中适应度最大的个体作为最优结果,将其反编码,即为所求的最佳分割阈值。6.3实验结果与效果对比图在对灰度图像转化为索引图像并将其数据类型转化为双精度型之后的图片如下:此时,就可对上图进行基于遗传算法的最大类间方差分割法进行处理了。设定初始群体的数目N=40,交叉概率Pc=0.9,代沟为0.9,变异率为Pm采用默认值。最大迭代数G=50。实验结果及数据如下:通过50次迭代寻优后,找到最优化阈值M=162:基于遗传算法的最大类间方差法分割后图像6.4实验结论本文所讨论的基于遗传算法的图像分割算法,采用标准遗传算法作为计算流程,但对其中的选择算子进行了改变,用高级选择函数select代替了传统的单一选择算子,使得在每次选择运算后所得的父辈更为健壮,更好的保持了第一代父辈的表现型,使得分割更加精确。通过设计变异概率,使得每次迭代遗传运算后,子代的表现型略有改变,从而更以获得最优的表现型,减少了迭代寻优次数,降低了程序运行时间。同时考虑到过多迭代不利于降低程序运行时间,以及在寻优过程中的最佳值收敛问题,指定迭代次数为50次时即跳出整个程序,通过反编码求得最优阈值,并通过变量调用,直接应用于下面的分割程序,达到了整个算法的自动完成。相对于灰度直方图双峰法,本方法对图像的先验要求不高,不需要像灰度直方图法那样,先通过获得图像的灰度直方图取得分割阈值后再对图像处理,整个程序的自动化程度高,且对于那些灰度直方图不呈双峰分布的图像,本算法程序一样可以处理,这就扩大了本算法程序的灵活性,从而更具有实际意义。而且,由于灰度直方图双峰法的阈值是通过人眼观察获得,其误差必然大于机器迭代运算所取得的最优阈值,而普通的阈值分割法,如ostu法,虽然实现了阈值的自动选择,但其运算时间与本算法相比偏长,实时性差于本算法。因此,在图像分割算法中,基于遗传算法的图像分割算法更优于其它传统的图像分割算法。通过上述讨论,以及两种方法的处理结果图片的对比,基于遗传算法的最大类间方差法分割后图像与直方图双峰法分割后的图像像比,效果更明显,且无须事先测量图像的灰度直方图,更加灵活,更加精确。其相关试验结论列于下表:基于遗传算法的图象分割实验结论总表:阈值灰度直方图――参考文献张兆礼,赵春晖,梅晓丹.现代图像处理技术及MAThAB实现.北京:人民邮电出版社,2001.1陈传波,金先级.数字图像处理.北京:机械工业出版社,2004.夏德深,傅德胜等.现代图象处理技术与应用.南京:东南大学出版社,1997.章毓晋.图象工程图象处理和分析.北京:清华大学出版社,1999.王小平,曹立明.遗传算法理论、应用与软件实现.西安:西安交大出版社,2002.徐立中,数字图像的智能处理。北京:国防工业出版社,2001王耀南,李树涛,毛建旭,计算机图像处理与识别技术,北京:高等教育出版社,2001雷英杰,张善文,李绪武,周创明.MATLAB遗传算法工具箱及应用,西安:西安电子科技大学出版社何新贵.模糊知识处理的理论与计算,国防工业出版社,1999徐建华.图像处理与分析,北京:科学出版,1992.阮秋琦.数字图象处理学,电子工业出版社,2001王博等.图像平滑与边缘检测的模糊向量描述,小型微型计算机统,Vol.20,1999吴谨,李娟,刘成云,基于最大熵的灰度阈值选取方法,武汉科技大学学报,Vol.27,No.1,Mar,2004李鉴庆,左坤隆,图像阈值选取的一种快速算法.计算机与现代化,2001年第6期魏宝刚,鲁东明,潘云鹤等.多颜色空间上的互式图像分割.计算机学报,775杜亚勤,基于模糊集的图像边缘检测技术研究:.西安:西安工业学院,2004年4月王保平,基于模糊技术的图像处理方法研究,西安:西安电子科技大学,2004,9杜亚娟,潘泉,周德龙等,图像多级灰度非线性模糊增强算法研究,数据采集与处Vo1.14No.2RussJC,Theimageprocessinghandbook.NewYork:CRCPress,1994rmationandContro1,1965,:338353LotfiA.Zadeh,Afuzzysettheoreticinterpretationoflinguistichedges,JournalofCybernetic,S.K.Pal,R.A.King.ImageEnhancementUsingFuzzySets.Electron.Lett.,378.S.K.PaI,R.:A.King,OnEdgeDetectionofRRayImagesUsingFuzzySets.IEEETrans.Patt.AnalandMachineIntell.1983,PAMI5:6977.OtsuN.AThresholdSelectionMethodFromGrayLevelHistograms.IEEETransonSystManCybernet,1979,SMC9:6266附录附录一灰度直方图双峰法分割源代码clear,closeallB=%读入原始jpg格式图像imshow,I1=rgb2%将原图像转化为灰度图象imshow,=gray2%将灰度图像转化为索引图像figure,imhist%画出灰度直方图,以判断域值I1=%将unit8数组转化为double型数组Z=I1%将double型数组I1转存到Z中=fori=1:mforj=1:nifZ240%灰度值大于域值时是白色Z=256;endendendfigure%画出分割后目标图像image,图像I图像格式转化及灰度直方图双峰法分割源代码clear,closeallB=%读入原始jpg格式图像sheimshow,I1=rgb2%将原图像转化为灰度图象imshow,=gray2%将灰度图像转化为索引图像figure,imhist%画出灰度直方图,以判断域值I1=%将unit8数组转化为double型数组Z=I1%将double型数组I1转存到Z中=fori=1:mforj=1:nifZ240%灰度值大于域值时是白色Z=256;endendendfigure%画出分割后目标图像image,图像II图像格式转化及灰度直方图双峰法分割源代码clear,closeallB=%读入原始jpg格式图像月亮imshow,I1=rgb2%将原图像转化为灰度图象imshow,=gray2%将灰度图像转化为索引图像figure,imhist%画出灰度直方图,以判断域值I1=%将unit8数组转化为double型数组Z=I1%将double型数组I1转存到Z中=fori=1:mforj=1:nifZ240%灰度值大于域值时是白色Z=256;endendendfigure%画出分割后目标图像image,附录二Crtbp函数源代码:%CRTBP.mCreateaninitialpopulation%%Thisfunctioncreatesabinarypopulationofgivensizeandstructure.%%Syntax:=crtbp%%InputParameters:%%NindEitherascalarcontainingthenumberofindividuals%inthenewpopulationorarowvectoroflengthtwo%containingthenumberofindividualsandtheirlength.%%LindAscalarcontainingthelengthoftheindividual%chromosomes.%%BaseAscalarcontainingthebaseofthechromosome%elementsorarowvectorcontainingthebase%ofthelociofthechromosomes.%%OutputParameters:%%ChromAmatrixcontainingtherandomvaluedchromosomes%rowwise.%%LindAscalarcontainingthelengthofthechromosome.%%BaseVArowvectorcontainingthebaseofthe%chromosomeloci.%Author:AndrewChipperfield%Date:19Jan94function=crtbpnargs=%Checkparameterconsistencyifnargs=1,=endifnargs=2,=endifnargs==3,=endifnN==2ifLind=NNind=NBaseV=elseifBaseV=crtbase,Lind);Lind=NNind=NelseififLind~=length,endBaseV=LLind=NNind=NendelseifnN==1ifnargs==2ifnL==1,BaseV=else,BaseV=LLind=nL;endelseifnargs==3ifnB==1,BaseV=elseifnB~=Lind,elseBaseV=Bendendelseend%Createastructureofrandomchromosomesinrowwiseorder,dimensions%NindbyLind.Thebaseofeachchromosomeslociisgivenbythevalue%ofthecorrespondingelementoftherowvectorbase.Chrom=floor.*BaseV,:));%Endoffile附录三Bs2rv函数源代码:%BS2RV.mBinarystringtorealvector%%Thisfunctiondecodesbinarychromosomesintovectorsofreals.The%chromosomesareseenastheconcatenationofbinarystringsofgiven%length,anddecodedintorealnumbersinaspecifiedintervalusing%eitherstandardbinaryorGraydecoding.%%Syntax:Phen=bs2rv%%Inputparameters:%%ChromMatrixcontainingthechromosomesofthecurrent%population.Eachlinecorrespondstoone%individual‘sconcatenatedbinarystring%representation.LeftmostbitsareMSband%rightmostareLSb.%%FieldDMatrixdescribingthelengthandhowtodecode%eachsubstringinthechromosome.Ithasthe%followingstructure:%%;%%where%lenrowvectorcontainingthelengthof%eachsubstringinChrom.sum%shouldequaltheindividuallength.%lb,%ubLowerandupperboundsforeach%variable.%codebinaryrowvectorindicatinghoweach%substringistobedecoded.%scalebinaryrowvectorindicatingwhereto%usearithmeticand/orlogarithmic%scaling.%lbin,%ubinbinaryrowvectorsindicatingwhether%ornottoincludeeachboundinthe%representationrange%%Outputparameter:%%PhenRealmatrixcontainingthepopulationphenotypes.%%Author:CarlosFonseca,Updated:AndrewChipperfield%Date:08/06/93,Date:26Jan94functionPhen=bs2rv%Identifythepopulationsize%andthechromosomelength=%Identifythenumberofdecisionvariables=ifseven~=7end%Getsubstringpropertieslen=FieldD;lb=FieldD;ub=FieldD;code=~);scale=~);lin=~);uin=~);%Checksubstringpropertiesforconsistencyifsum~=Lind,endif~all.*ub0)end%DecodechromosomesPhen=lf=li=Prec=.5.^logsgn=sign(lb);lb=log));ub=log));delta=Prec=.5.^num=.*Pden=.*Pfori=1:Nvar,idx=li:ifcode%GraydecodingChrom=rem‘)‘,2);endPhen=Chrom*;Phen=lb+delta*+num)./);endexpand=ifanyPhen=logsgn.*exp);end附录四适应度函数target源代码:functionf=target%适应度函数,T为待处理图像,M为域值序列=W=,,f=fork=1:WI=0;s1=0;J=0;s2=0;%统计目标图像和背景图像的像素数及像素之和fori=1:Uforj=1:VifT=Ms1=s1+T;I=I+1;endifTMs2=s2+T;J=J+1;endendendifI==0,p1=0;elsep1=s1/I;endifJ==0,p2=0;elsep2=s2/J;endf=I*J**/;end附录五选择函数Select源代码:%SELECT.M%%Thisfunctionperformsuniversalselection.Thefunctionhandles%multiplepopulationsandcallsthelowlevelselectionfunction%fortheactualselectionprocess.%%Syntax:SelCh=select%%Inputparameters:%SEL_FNameoftheselectionfunction%ChromMatrixcontainingtheindividualsofthecurrent%population.Eachrowcorrespondstooneindividual.%FitnVColumnvectorcontainingthefitnessvaluesofthe%individualsinthepopulation.%GGAPRateofindividualstobeselected%ifomitted1.0isassumed%SUBPOPNumberofsubpopulations%ifomitted1subpopulationisassumed%%Outputparameters:%SelChMatrixcontainingtheselectedindividuals.%Author:HartmutPohlheim%History:10.03.94filecreatedfunctionSelCh=%Checkparameterconsistencyifnargin3,end%Identifythepopulationsize==ifNindCh~=NindF,endifVarF~=1,endifnargin5,SUBPOP=1;endifnargin4,ifisempty,SUBPOP=1;elseifisnan,SUBPOP=1;elseiflength~=1,endendif~=fix,endNind=NindCh/SUBPOP;%Computenumberofindividualspersubpopulationifnargin4,GGAP=1;endifnargin3,ifisempty,GGAP=1;elseifisnan,GGAP=1;elseiflength~=1,elseif,endend%ComputenumberofnewindividualsNSel=max,2);%SelectindividualsfrompopulationSelCh=;forirun=1:SUBPOP,FitnVSub=FitnV*Nind+1:irun*Nind);ChrIx=feval+*NSelCh=;end%Endoffunction附录六交叉函数recombin的源代码:%RECOMBIN.M%%Thisfunctionperformsrecombinationbetweenpairsofindividuals%andreturnsthenewindividualsaftermating.Thefunctionhandles%multiplepopulationsandcallsthelowlevelrecombinationfunction%fortheactualrecombinationprocess.%%Syntax:NewChrom=recombin%%Inputparameters:%REC_FStringcontainingthenameoftherecombinationor%crossoverfunction%ChromMatrixcontainingthechromosomesoftheold%population.Eachlinecorrespondstooneindividual%RecOptScalarcontainingtheprobabilityof%recombination/crossoveroccurringbetweenpairs%ofindividuals.%ifomittedorNaN,1isassumed%SUBPOPNumberofsubpopulations%ifomittedorNaN,1subpopulationisassumed%%Outputparameter:%NewChromMatrixcontainingthechromosomesofthepopulation%afterrecombinationinthesameformatasOldChrom.%Author:HartmutPohlheim%History:18.03.94filecreatedfunctionNewChrom=%Checkparameterconsistencyifnargin2,end%Identifythepopulationsize=ifnargin4,SUBPOP=1;endifnargin3,ifisempty,SUBPOP=1;elseifisnan,SUBPOP=1;elseiflength~=1,endendif~=fix,endNind=Nind/SUBPOP;%Computenumberofindividualspersubpopulationifnargin3,RecOpt=0.7;endifnargin2,ifisempty,RecOpt=0.7;elseifisnan,RecOpt=0.7;elseiflength~=1,elseif,endend%SelectindividualsofonesubpopulationandcalllowlevelfunctionNewChrom=;forirun=1:SUBPOP,ChromSub=Chrom*Nind+1:irun*Nind,:);NewChromSub=NewChrom=;end%Endoffunction附录七变异函数mut源代码:%MUT.m%%Thisfunctiontakestherepresentationofthecurrentpopulation,%mutateseachelementwithgivenprobabilityandreturnstheresulting%population.%%Syntax:NewChrom=mut%%Inputparameters:%%OldChromAmatrixcontainingthechromosomesofthe%currentpopulation.Eachrowcorrespondsto%anindividualsstringrepresentation.%%PmMutationprobability.Defaultvalue%ofPm=0.7/Lind,whereLindisthechromosome%lengthisassumedifomitted.%%BaseVOptionalrowvectorofthesamelengthasthe%chromosomestructuredefiningthebaseofthe%individualelementsofthechromosome.Binary%representationisassumedifomitted.%%Outputparameter:%%NewChromAMatrixcontainingamutatedversionof%OldChrom.%%Author:AndrewChipperfield%Date:25Jan94functionNewChrom=mut%getpopulationsizeandchromosomelength=%checkinputparametersifnargin2,Pm=0.7/Lendifisnan,Pm=0.7/Lendif,BaseV=endif),BaseV=endif),BaseV=endif)error,end%createmutationmaskmatrixBaseM=BaseV,:);%performmutationonchromosomestructureNewChrom=remPm).*ceil.*),BaseM);附录八基于遗传算法的最大类间方差法对JPG格式图像分割的程序源代码:clear,closeallB=%读入原始jpg格式图像imshow,I1=rgb2%将原图像转化为灰度图象imshow,BW1=BW2=figure,imshow,%边缘检测figure,imshow,=gray2%将灰度图像转化为索引图像I1=%将unit8数组转化为double型数组Z=I1%将double型数组I1转存到Z中figure%画出未进行分割的原始图像image,NIND=40;%个体数目MAXGEN=50;%最大遗传代数PRECI=8;%变量的二进制位数GGAP=0.9;%代沟FieldD=;%建立区域描述器Chrom=%创建初始种群gen=0;phen=bs2%初始种群十进制转换ObjV=%计算种群适应度值whilegenMAXGEN%代沟FitnV=%分配适应度值SelCh=%选择SelCh=%重组SelCh=%变异phenSel=bs2%子代十进制转换ObjVSel==%重插入gen=gen+1;end=M=bs2rv,FieldD);%估计域值=fori=1:mforj=1:nifZM%灰度值大于域值时是白色Z=256;endendendfigure%画出分割后目标图像image,target求适应度函数代码:functionf=target%适应度函数,T为待处理图像,M为域值序列=W=f=fork=1:WI=0;s1=0;J=0;s2=0;%统计目标图像和背景图像的像素数及像素之和fori=1:Uforj=1:VifT=Ms1=s1+T;I=I+1;endifTMs2=s2+T;J=J+1;endendendifI==0,p1=0;elsep1=s1/I;endifJ==0,p2=0;elsep2=s2/J;endf=I*J**/;
(图像,阈值,算法,灰度,直方图,方差,种群,函数)相关信息
职称计算机考试科目相关资讯
本站部分信息来源于互联网,不代表本站观点或立场,如有侵权,请来电告知,我们将及时处理

我要回帖

更多关于 matlab subplot函数 的文章

 

随机推荐