欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    matlab_图像分割算法源码(32页).doc

    • 资源ID:35403364       资源大小:214KB        全文页数:32页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    matlab_图像分割算法源码(32页).doc

    -matlab_图像分割算法源码-第 32 页matlab 图像分割算法源码图像读取及灰度变换I=imread('cameraman.tif');%读取图像subplot(1,2,1),imshow(I) %输出图像title('原始图像') %在原始图像中加标题subplot(1,2,2),imhist(I) %输出原图直方图title('原始图像直方图') %在原图直方图上加标题图像旋转I = imread('cameraman.tif');figure,imshow(I);theta = 30;K = imrotate(I,theta); % Try varying the angle, theta.figure, imshow(K)边缘检测I = imread('cameraman.tif');J1=edge(I,'sobel');J2=edge(I,'prewitt');J3=edge(I,'log');subplot(1,4,1),imshow(I);subplot(1,4,2),imshow(J1);subplot(1,4,3),imshow(J2);subplot(1,4,4),imshow(J3);1.图像反转MATLAB程序实现如下:I=imread('xian.bmp');J=double(I);J=-J+(256-1);                 %图像反转线性变换H=uint8(J);subplot(1,2,1),imshow(I);subplot(1,2,2),imshow(H);2.灰度线性变换MATLAB程序实现如下:I=imread('xian.bmp');subplot(2,2,1),imshow(I);title('原始图像');axis(50,250,50,200);axis on;                  %显示坐标系I1=rgb2gray(I);subplot(2,2,2),imshow(I1);title('灰度图像');axis(50,250,50,200);axis on;                  %显示坐标系J=imadjust(I1,0.1 0.5,); %局部拉伸,把0.1 0.5内的灰度拉伸为0 1subplot(2,2,3),imshow(J);title('线性变换图像0.1 0.5');axis(50,250,50,200);grid on;                  %显示网格线axis on;                  %显示坐标系K=imadjust(I1,0.3 0.7,); %局部拉伸,把0.3 0.7内的灰度拉伸为0 1subplot(2,2,4),imshow(K);title('线性变换图像0.3 0.7');axis(50,250,50,200);grid on;                  %显示网格线axis on;                  %显示坐标系3.非线性变换MATLAB程序实现如下:I=imread('xian.bmp');I1=rgb2gray(I);subplot(1,2,1),imshow(I1);title('灰度图像');axis(50,250,50,200);grid on;                  %显示网格线axis on;                  %显示坐标系J=double(I1);J=40*(log(J+1);H=uint8(J);subplot(1,2,2),imshow(H);title('对数变换图像');axis(50,250,50,200);grid on;                  %显示网格线axis on;                  %显示坐标系4.直方图均衡化MATLAB程序实现如下:I=imread('xian.bmp');I=rgb2gray(I);figure;subplot(2,2,1);imshow(I);subplot(2,2,2);imhist(I);I1=histeq(I);figure;subplot(2,2,1);imshow(I1);subplot(2,2,2);imhist(I1);5.线性平滑滤波器用MATLAB实现领域平均法抑制噪声程序:I=imread('xian.bmp');subplot(231)imshow(I)title('原始图像')I=rgb2gray(I);I1=imnoise(I,'salt & pepper',0.02);subplot(232)imshow(I1)title('添加椒盐噪声的图像')k1=filter2(fspecial('average',3),I1)/255;          %进行3*3模板平滑滤波k2=filter2(fspecial('average',5),I1)/255;          %进行5*5模板平滑滤波k3=filter2(fspecial('average',7),I1)/255;          %进行7*7模板平滑滤波k4=filter2(fspecial('average',9),I1)/255;          %进行9*9模板平滑滤波subplot(233),imshow(k1);title('3*3模板平滑滤波');subplot(234),imshow(k2);title('5*5模板平滑滤波');subplot(235),imshow(k3);title('7*7模板平滑滤波');subplot(236),imshow(k4);title('9*9模板平滑滤波');6.中值滤波器用MATLAB实现中值滤波程序如下:I=imread('xian.bmp');I=rgb2gray(I);J=imnoise(I,'salt&pepper',0.02);subplot(231),imshow(I);title('原图像');subplot(232),imshow(J);title('添加椒盐噪声图像');k1=medfilt2(J);            %进行3*3模板中值滤波k2=medfilt2(J,5,5);      %进行5*5模板中值滤波k3=medfilt2(J,7,7);      %进行7*7模板中值滤波k4=medfilt2(J,9,9);      %进行9*9模板中值滤波subplot(233),imshow(k1);title('3*3模板中值滤波');subplot(234),imshow(k2);title('5*5模板中值滤波');subplot(235),imshow(k3);title('7*7模板中值滤波');subplot(236),imshow(k4);title('9*9模板中值滤波');7.用Sobel算子和拉普拉斯对图像锐化:I=imread('xian.bmp');subplot(2,2,1),imshow(I);title('原始图像');axis(50,250,50,200);grid on;                  %显示网格线axis on;                  %显示坐标系I1=im2bw(I);subplot(2,2,2),imshow(I1);title('二值图像');axis(50,250,50,200);grid on;                  %显示网格线axis on;                  %显示坐标系H=fspecial('sobel');     %选择sobel算子 J=filter2(H,I1);            %卷积运算subplot(2,2,3),imshow(J); title('sobel算子锐化图像');axis(50,250,50,200);grid on;                  %显示网格线axis on;                  %显示坐标系h=0 1 0,1 -4 1,0 1 0;   %拉普拉斯算子J1=conv2(I1,h,'same');            %卷积运算subplot(2,2,4),imshow(J1); title('拉普拉斯算子锐化图像');axis(50,250,50,200);grid on;                  %显示网格线axis on;                  %显示坐标系8.梯度算子检测边缘用MATLAB实现如下:I=imread('xian.bmp');subplot(2,3,1);imshow(I);title('原始图像');axis(50,250,50,200);grid on;                  %显示网格线axis on;                  %显示坐标系I1=im2bw(I);subplot(2,3,2);imshow(I1);title('二值图像');axis(50,250,50,200);grid on;                  %显示网格线axis on;                  %显示坐标系I2=edge(I1,'roberts');figure;subplot(2,3,3);imshow(I2);title('roberts算子分割结果');axis(50,250,50,200);grid on;                  %显示网格线axis on;                  %显示坐标系I3=edge(I1,'sobel');subplot(2,3,4);imshow(I3);title('sobel算子分割结果');axis(50,250,50,200);grid on;                  %显示网格线axis on;                  %显示坐标系I4=edge(I1,'Prewitt');subplot(2,3,5);imshow(I4);title('Prewitt算子分割结果');axis(50,250,50,200);grid on;                  %显示网格线axis on;                  %显示坐标系9.LOG算子检测边缘用MATLAB程序实现如下:I=imread('xian.bmp');subplot(2,2,1);imshow(I);title('原始图像');I1=rgb2gray(I);subplot(2,2,2);imshow(I1);title('灰度图像');I2=edge(I1,'log');subplot(2,2,3);imshow(I2);title('log算子分割结果');10.Canny算子检测边缘用MATLAB程序实现如下:I=imread('xian.bmp');subplot(2,2,1);imshow(I);title('原始图像')I1=rgb2gray(I);subplot(2,2,2);imshow(I1);title('灰度图像');I2=edge(I1,'canny');subplot(2,2,3);imshow(I2);title('canny算子分割结果');11.边界跟踪(bwtraceboundary函数)clcclear allI=imread('xian.bmp');figureimshow(I);title('原始图像');I1=rgb2gray(I);                %将彩色图像转化灰度图像 threshold=graythresh(I1);        %计算将灰度图像转化为二值图像所需的门限BW=im2bw(I1, threshold);       %将灰度图像转化为二值图像figureimshow(BW);title('二值图像');dim=size(BW);col=round(dim(2)/2)-90;         %计算起始点列坐标row=find(BW(:,col),1);          %计算起始点行坐标connectivity=8;num_points=180;contour=bwtraceboundary(BW,row,col,'N',connectivity,num_points); %提取边界figureimshow(I1);hold on;plot(contour(:,2),contour(:,1), 'g','LineWidth' ,2);title('边界跟踪图像');12.Hough变换I= imread('xian.bmp');rotI=rgb2gray(I);subplot(2,2,1);imshow(rotI);title('灰度图像');axis(50,250,50,200);grid on;                 axis on; BW=edge(rotI,'prewitt');subplot(2,2,2);imshow(BW);title('prewitt算子边缘检测后图像');axis(50,250,50,200);grid on;                 axis on; H,T,R=hough(BW);subplot(2,2,3);imshow(H,'XData',T,'YData',R,'InitialMagnification','fit');title('霍夫变换图');xlabel('theta'),ylabel('rho');axis on , axis normal, hold on;P=houghpeaks(H,5,'threshold',ceil(0.3*max(H(:);x=T(P(:,2);y=R(P(:,1);plot(x,y,'s','color','white');lines=houghlines(BW,T,R,P,'FillGap',5,'MinLength',7);subplot(2,2,4);,imshow(rotI);title('霍夫变换图像检测');axis(50,250,50,200);grid on;                 axis on; hold on;max_len=0;for k=1:length(lines)xy=lines(k).point1;lines(k).point2;plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');len=norm(lines(k).point1-lines(k).point2);if(len>max_len)max_len=len;xy_long=xy;endendplot(xy_long(:,1),xy_long(:,2),'LineWidth',2,'Color','cyan');13.直方图阈值法用MATLAB实现直方图阈值法:I=imread('xian.bmp');I1=rgb2gray(I);figure;subplot(2,2,1);imshow(I1);title('灰度图像')axis(50,250,50,200);grid on;                  %显示网格线axis on;                  %显示坐标系m,n=size(I1);                            %测量图像尺寸参数GP=zeros(1,256);                           %预创建存放灰度出现概率的向量for k=0:255     GP(k+1)=length(find(I1=k)/(m*n);    %计算每级灰度出现的概率,将其存入GP中相应位置endsubplot(2,2,2),bar(0:255,GP,'g')                   %绘制直方图title('灰度直方图')xlabel('灰度值')ylabel('出现概率') I2=im2bw(I,150/255);   subplot(2,2,3),imshow(I2);title('阈值150的分割图像')axis(50,250,50,200);grid on;                  %显示网格线axis on;                  %显示坐标系I3=im2bw(I,200/255);   %subplot(2,2,4),imshow(I3);title('阈值200的分割图像')axis(50,250,50,200);grid on;                  %显示网格线axis on;                  %显示坐标系14. 自动阈值法:Otsu法用MATLAB实现Otsu算法:clcclear allI=imread('xian.bmp');subplot(1,2,1),imshow(I);title('原始图像')axis(50,250,50,200);grid on;                  %显示网格线axis on;                  %显示坐标系level=graythresh(I);     %确定灰度阈值BW=im2bw(I,level);subplot(1,2,2),imshow(BW);title('Otsu法阈值分割图像')axis(50,250,50,200);grid on;                  %显示网格线axis on;                  %显示坐标系15.膨胀操作I=imread('xian.bmp');          %载入图像I1=rgb2gray(I);subplot(1,2,1);imshow(I1);title('灰度图像')      axis(50,250,50,200);grid on;                  %显示网格线axis on;                  %显示坐标系se=strel('disk',1);          %生成圆形结构元素I2=imdilate(I1,se);             %用生成的结构元素对图像进行膨胀subplot(1,2,2);imshow(I2);title('膨胀后图像');axis(50,250,50,200);grid on;                  %显示网格线axis on;                  %显示坐标系16.腐蚀操作MATLAB实现腐蚀操作I=imread('xian.bmp');          %载入图像I1=rgb2gray(I);subplot(1,2,1);imshow(I1);title('灰度图像')      axis(50,250,50,200);grid on;                  %显示网格线axis on;                  %显示坐标系se=strel('disk',1);       %生成圆形结构元素I2=imerode(I1,se);        %用生成的结构元素对图像进行腐蚀subplot(1,2,2);imshow(I2);title('腐蚀后图像');axis(50,250,50,200);grid on;                  %显示网格线axis on;                  %显示坐标系17.开启和闭合操作用MATLAB实现开启和闭合操作I=imread('xian.bmp');          %载入图像subplot(2,2,1),imshow(I);title('原始图像');axis(50,250,50,200);axis on;                  %显示坐标系 I1=rgb2gray(I);subplot(2,2,2),imshow(I1);title('灰度图像');axis(50,250,50,200);axis on;                  %显示坐标系                   se=strel('disk',1);     %采用半径为1的圆作为结构元素I2=imopen(I1,se);         %开启操作I3=imclose(I1,se);        %闭合操作subplot(2,2,3),imshow(I2);title('开启运算后图像');axis(50,250,50,200);axis on;                  %显示坐标系subplot(2,2,4),imshow(I3);title('闭合运算后图像');axis(50,250,50,200); axis on;                  %显示坐标系18.开启和闭合组合操作I=imread('xian.bmp');          %载入图像subplot(3,2,1),imshow(I);title('原始图像');axis(50,250,50,200);axis on;                  %显示坐标系 I1=rgb2gray(I);subplot(3,2,2),imshow(I1);title('灰度图像');axis(50,250,50,200);axis on;                  %显示坐标系                   se=strel('disk',1);     I2=imopen(I1,se);         %开启操作I3=imclose(I1,se);        %闭合操作subplot(3,2,3),imshow(I2);title('开启运算后图像');axis(50,250,50,200);axis on;                  %显示坐标系subplot(3,2,4),imshow(I3);title('闭合运算后图像');axis(50,250,50,200);axis on;                  %显示坐标系se=strel('disk',1); I4=imopen(I1,se);I5=imclose(I4,se);subplot(3,2,5),imshow(I5);        %开闭运算图像title('开闭运算图像');axis(50,250,50,200);axis on;                  %显示坐标系 I6=imclose(I1,se);I7=imopen(I6,se);subplot(3,2,6),imshow(I7);        %闭开运算图像 title('闭开运算图像');axis(50,250,50,200);axis on;                  %显示坐标系   19.形态学边界提取利用MATLAB实现如下:I=imread('xian.bmp');          %载入图像subplot(1,3,1),imshow(I);title('原始图像'); axis(50,250,50,200);grid on;                  %显示网格线axis on;                  %显示坐标系I1=im2bw(I);subplot(1,3,2),imshow(I1);title('二值化图像');axis(50,250,50,200);grid on;                  %显示网格线axis on;                  %显示坐标系I2=bwperim(I1);                 %获取区域的周长subplot(1,3,3),imshow(I2); title('边界周长的二值图像');axis(50,250,50,200);grid on;axis on;              20.形态学骨架提取利用MATLAB实现如下:I=imread('xian.bmp');subplot(2,2,1),imshow(I);title('原始图像');axis(50,250,50,200);axis on;                  I1=im2bw(I);subplot(2,2,2),imshow(I1);title('二值图像');axis(50,250,50,200);axis on;                 I2=bwmorph(I1,'skel',1);subplot(2,2,3),imshow(I2);title('1次骨架提取');axis(50,250,50,200);axis on;                  I3=bwmorph(I1,'skel',2);subplot(2,2,4),imshow(I3);title('2次骨架提取');axis(50,250,50,200);axis on;               21.直接提取四个顶点坐标I = imread('xian.bmp');I = I(:,:,1);BW=im2bw(I); figureimshow(BW)x,y=getpts Matlab求二值图像的周长  2013-01-21 20:00:21|  分类: matlab |  标签: |字号大中小 订阅 方法一,使用8向链码。水平或垂直连通的长度为1,斜向连通长度为1.414(2的平方根)首先给出8向链码的编码函数function out=chaincode8(image)%功能:实现8连通链码%输入: 二值图像%输出:链码的结果n=0 1;-1 1;-1 0;-1 -1;0 -1;1 -1;1 0;1 1;%设置标志flag=1;%初始输出的链码串为空cc=;%找到起始点x y=find(image=1);x=min(x);imx=image(x,:);y=find(imx=1, 1 );first=x y;dir=7;while flag=1          tt=zeros(1,8);          newdir=mod(dir+7-mod(dir,2),8);          for i=0:7              j=mod(newdir+i,8)+1;              tt(i+1)=image(x+n(j,1),y+n(j,2);          end    d=find(tt=1, 1 );          dir=mod(newdir+d-1,8);          %找到下一个像素点的方向码后补充在链码的后面    cc=cc,dir;    x=x+n(dir+1,1);y=y+n(dir+1,2);    %判别链码的结束标志    if x=first(1)&&y=first(2)        flag=0;    endendout=cc;下面是主函数i=bwperim(imread('1.bmp'),8);%求出二值图像的边界c8=chaincode8(i);%生成8向链码sum1=0;sum2=0;for k=1:length(c8)    if c8(k)=0 |c8(k)=2 |c8(k)=4 |c8(k)=6        sum1=sum1+1;    else        sum2=sum2+1;    endendl=sum1+sum2*sqrt(2);方法二,利用Matlab提供的函数i=imread('1.bmp');s=regionprops(i,'Perimeter');1. 代码matlab函数实现图像锐化     I,map=imread('img.jpg');imshow(I,map);I=double(I);Gx,Gy=gradient(I);       % 计算梯度G=sqrt(Gx.*Gx+Gy.*Gy);   % 注意是矩阵点乘J1=G;figure,imshow(J1,map);    % 第一种图像增强J2=I;                   % 第二种图像增强K=find(G>=7);J2(K)=G(K);figure,imshow(J2,map);J3=I;                   % 第三种图像增强K=find(G>=7);J3(K)=255;figure,imshow(J3,map);J4=I;                   % 第四种图像增强K=find(G<=7);J4(K)=255;figure,imshow(J4,map);J5=I;                   % 第五种图像增强K=find(G<=7);J5(K)=0;Q=find(G>=7);J5(Q)=255;figure,imshow(J5,map);MATLAB示例程序001-OSTU大津法/最大类间方差  Otsu最大类间方差法原理    利用阈值将原图像分成前景,背景两个图象。    当取最佳阈值时,背景应该与前景差别最大,即方差最大。otsu算法找的就是这个最大方差下的阈值。 最大类间方差法(otsu)的公式推导:   记t为前景与背景的分割阈值,前景点数占图像比例为w0,平均灰度为u0;背景点数占图像比例为w1,平均灰度为u1。   则图像的总平均灰度为:u=w0*u0+w1*u1。   前景和背景图象的方差:g=w0*(u0-u)*(u0-u)+w1*(u1-u)*(u1-u)=w0*w1*(u0-u1)*(u0-u1),此公式为方差公式。   循环求取最大方差即可。   MABLAB代码及详细注释:function  ostuimg = imread('Lena.jpg');I_gray=rgb2gray(img);figure,imshow(I_gray);I_double=double(I_gray);    %转化为双精度,因为大多数的函数和操作都是基于double的%figure,imshow(I_double);wid,len=size(I_gray);     %wid为行数,len为列数colorlevel=256;     %灰度级hist=zeros(colorlevel,1);   %直方图,256×1的0矩阵%threshold=128; %初始阈值%计算直方图,统计灰度值的个数for i=1:wid    for j=1:len        m=I_gray(i,j)+1;    %因为灰度为0-255所以+1        hist(m)=hist(m)+1;    endend%直方图归一化hist=hist/(wid*len);   %miuT为总的平均灰度,histm代表像素值为m的点个数miuT=0;for m=1:colorlevel    miuT=miuT+(m-1)*hist(m);endxigmaB2=0;  %用于保存每次计算的方差,与下次计算的方差比较大小for mindex=1:colorlevel    threshold=mindex-1;    omega1=0;    %前景点所占比例    omega2=0;    %背景点所占比例    for m=1:threshold-1        omega1=omega1+hist(m);  %计算前景比例    end    omega2=1-omega1;            %计算背景比例    miu1=0;      %前景平均灰度比例    miu2=0;      %背景平均灰度比例    %计算前景与背景平均灰度    for m=1:colorlevel        if m        miu1=miu1+(m-1)*hist(m);   %前

    注意事项

    本文(matlab_图像分割算法源码(32页).doc)为本站会员(1595****071)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开