`
mkdkd
  • 浏览: 34586 次
  • 性别: Icon_minigender_2
  • 来自: 苏州
社区版块
存档分类
最新评论

matlab

 
阅读更多

matlab
2011年05月17日
  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 1]
  subplot(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 1]
  subplot(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('lena.jpg);
  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('lena.jpg.');
  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函数)
  clc
  clear all
  I=imread('xian.bmp');
  figure
  imshow(I);
  title('原始图像');
  I1=rgb2gray(I);                %将彩色图像转化灰度图像
  threshold=graythresh(I1);        %计算将灰度图像转化为二值图像所需的门限
  BW=im2bw(I1, threshold);       %将灰度图像转化为二值图像
  figure
  imshow(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);
  %提取边界
  figure
  imshow(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;
  end
  end
  plot(xy_long(:,1),xy_long(:,2),'LineWidth',2,'Color','cyan');
分享到:
评论

相关推荐

    matlab 资源matlab 资源matlab 资源matlab 资源

    matlab 资源matlab 资源matlab 资源matlab 资源matlab 资源matlab 资源matlab 资源matlab 资源matlab 资源matlab 资源matlab 资源matlab 资源matlab 资源matlab 资源matlab 资源matlab 资源matlab 资源matlab 资源...

    MATLAB源代码MATLAB源码大集合220MB上千个源码文件.zip

    MATLAB源代码MATLAB源码大集合220MB上千个源码文件: 2013全国大学生数学建模B题matlab代码.rar 802.11a OFDM MATLAB仿真代码!(推荐).rar MATLAB DCT水印源程序代码.rar MATLAB GUI 实例.rar matlab GUI实例.rar ...

    matlab找不到编译器的问题

    matlab在关联编译器的时候,会出现找不到编译器的问题,原因是matlab要找windows sdk的mt.exe,找不到报错的.因为vs2012在安装时,windows sdk的mt.exe位置变了,而matlab还是按照老的路径找,肯定找不到(原来在windows ...

    基于Matlab的卫星轨道仿真(源代码).zip

    基于Matlab的卫星轨道仿真(源代码) 基于Matlab的卫星轨道仿真(源代码) 基于Matlab的卫星轨道仿真(源代码) 基于Matlab的卫星轨道仿真(源代码) 基于Matlab的卫星轨道仿真(源代码) 基于Matlab的卫星轨道...

    matlab直接调用R语言

    This package is used for calling r language from matlab Most of the files already exist on the Internet But I wrote five to complement this package 1 In R enter: >install packages "rscproxy...

    Matlab教程(从新手到骨灰级玩家).pdf

    《Matlab教程(从新手到骨灰级玩家).pdf》是一份全面而详细的Matlab学习资料,适合各个层次的Matlab学习者使用。本教程从基础语法开始,逐步深入,涵盖了Matlab的各个方面,包括图像处理、信号处理、机器学习等。通过...

    数值分析及其Matlab实现

    第一篇 MATLAB快速入门多媒体辅助教学软件(用Microsoft PowerPoint 2000制作); 第二篇 MATLAB快速入门电子版(用Microsoft Word 2000制作)。第一篇和第二篇制作精细,图文并茂,可以帮助读者快速掌握MATLAB软件...

    Matlab关联Visual Studio 2013编译器

    matlab在关联编译器的时候 会出现找不到编译器的问题 原因是matlab要找windows sdk的mt exe 本文件修改方法也是根据wiills的那篇“matlab找不到编译器的问题”(matlab无法找到vs2012)的修改方法进行的 请参考:...

    Mathematica Symbolic Toolbox for MATLAB

    facility of MATLAB we write a toolbox that provides MATLAB users with all of the symbolic and high-precision numeric capabilities of Mathematica. In addition, since MathLink can pass native MATLAB ...

    matlab WVD变换时频分析方法

    处理非平稳信号的两种使用方法WVD 和STFT 的matlab程序,出图效果好,运算速度快。处理非平稳信号的两种使用方法WVD 和STFT 的matlab程序,出图效果好,运算速度快。处理非平稳信号的两种使用方法WVD 和STFT 的...

    用matlab实现DTFT 和DFT

    用matlab实现离散时间傅里叶变换DTFT 和离散傅里叶变换DFT。实验目的: 1、深刻理解离散时间信号傅里叶变换(DTFT)的定义,与连续傅里叶变换之间的关系; 2、深刻理解序列频谱的性质(连续的、周期的等); 3、能用...

    MATLAB图像处理实例详解源代码.zip

    《MATLAB图像处理实例详解》共15章,分为3篇。第1篇为MATLAB及图像基础,涵盖的内容有图像基础、MATLAB基础和MATLAB数字图像处理基础;第2篇为基于MATLAB的常见图像处理技术,涵盖的内容有数字图像的运算、数字图像...

    基于MATLAB的音频信号处理技术实现

    基于MATLAB的音频信号处理技术实现 本文以WAV 格式音频信号作为分析处理的输入数据,用MATLAB 处理音频信号的基 本流程是:先将WAV 格式音频信号经wavread 函数转换成MATLAB 列数组变量;再用MATLAB 强大的运算能力...

    VC++调用Matlab编写的DLL(混合编程)

    是我的CSDN博客中文章“VC++调用Matlab编写的DLL(混合编程)”的配套实例。资源中的源程序实现了VC++中在VS2008中进行VC和matlab的混合编程,在vc程序中调用自己编写的matlab绘图DLL。请先仔细阅读我的CSDN博客中...

    MATLAB 2017b linux版 破解文件(ubuntu14.04下已测,可用)

    (最好在终端中执行sudo cp [libmwservices.so的路径]/libmwservices.so /usr/local/MATLAB/R2017b/bin/glnxa64,直接复制可能会有权限问题)这时应该就可以通过sudo matlab打开MATLAB软件了。下两步是可选的。 5....

    《MATLAB R2016a 控制系统设计与仿真35个案例分析》【李晓东】样章+随书源码

    《MATLAB R2016a控制系统设计与仿真35个案例分析》是“精通MATLAB”丛书之一,以MATLAB R2016a为平台编写,通过35个案例介绍MATLAB在控制系统中的应用,应用性强,实用价值高。本书提供所有程序源代码。“精通MATLAB...

    人工蜂群算法matlab程序

    人工蜂群算法是模仿蜜蜂行为提出的一种优化方法,是集群智能思想的一个具体应用,它的主要特点是不需要了解问题的特殊信息,只需要对问题进行优劣的比较,通过各...本资源是人工蜂群算法的matlab代码,方便大家下载使用

    matlab精简版版

    MINI版matlab,无须安装,解压即用。MINI版matlab.exe启动时不检查C盘序列号. 在启动时不加载java窗口框架,去掉了不常用的toolbox和用不到的dll. 所以这个版本是个最小依赖度的Matlab,没有simulink,也没有medit.但...

    matlab实现简单FEM有限元分析.zip

    matlab算法matlab算法matlab算法matlab算法...matlab算法matlab算法matlab算法matlab算法matlab算法matlab算法matlab算法matlab算法matlab算法matlab算法matlab算法matlab算法matlab算法matlab算法matlab算法matlab算法

    基于Matlab的OFDM系统设计与仿真附源码

    基于Matlab的OFDM系统设计与仿真附源码,毕业论文,是本人用钱买来的。 毕业设计主要内容和要求:实现对OFDM系统的基本仿真实现基于Matlab软件的OFDM系统的一些基本仿真,实现以下要求: (1)学习和掌握OFDM的 基本...

Global site tag (gtag.js) - Google Analytics