matlab图像_matlab图像处理 - CSDN
精华内容
参与话题
  • MATLAB图像处理

    2020-01-15 10:56:46
    介绍MATLAB提供的图像处理功能,包括图像基础知识、图像合成、空间变换、邻域和块处理、局部滤波、正交变换、数学形态学、图像分析、图像增强、图像恢复、图像分割、图像配准和图像三维重建等内容。
  • matlab实现图像读取、写入和显示

    千次阅读 2019-04-25 13:52:00
    matlab实现图像读取、写入和显示 1.图像的读取 使用imread()函数来读取一幅图像。例如,下行代码实现的就是一个名为“lena.jpg”的图像文件,并将图像的像素矩阵赋值给变量I。文件名需要用单引号括起来,此外,...

    1.图像的读取

           使用imread()函数来读取一幅图像。例如,下行代码实现的就是一个名为“lena.jpg”的图像文件,并将图像的像素矩阵赋值给变量I。文件名需要用单引号括起来,此外,末尾的分号在matlab中用于取消输出。

    I = imread('lena.jpg');
    

           上面这个命令没有包含任何路径信息,imread()函数会从当前工作目录中寻找并读入图像文件。如果在当前目录中没有找到该文件,则matlab会尝试在搜索路径中寻找该文件。
           我们还可以显式地给出文件的完整路径,例如:

    I = imread('C:\lena.jpg');
    

    2.图像的写入

           使用函数imwrite()来写入图像文件,该函数语法形式为:

    imwrite(I,'filename')
    

            其中,参数I表示一个二维图像数组,可由imread()函数得到,filename必须是一种可识别的文件格式。例如,下面的命令可以将图像以lena为文件名存储为PNG格式的文件:

    imwrite(I,'lena.png')
    

           也可以写成:

    imwrite(I,'lena','png')
    

           如果filename中不包含路径信息,那么imwrite()就会把文件保存至当前的工作目录中。此外,imwrite()函数还有一种适用于JPEG图像的语法形式,如下:

    imwrite(I,'filename.jpg','quality',q)
    

           其中,q是整数,取值范围是0~100之间。JPEG是一种采用有损压缩为编码方式的图像文件格式,这里的q就是用来控制压缩后的图像质量的,q值越小,则表示图像的质量退化就越严重。

    3.图像的显示

    3.1 显示单幅图像

           通常使用imshow()函数来显示图像文件,它可以自动地创建句柄图形图像对象,并自动设置各句柄图形属性和图像特征,从而使得显示效果得以优化。imshow()函数的基本语法形式如下:

    imshow(I,[G])
    

           其中,参数I表示一个二维图像数组,可由imread()函数得到,G表示该图像的灰度级数,默认为256。另外,还可以写成如下格式:

    imshow(I,[low,high])
    

           low和high表示所有小于low的值都显示为黑色,所有大于high的值都显示为白色,在low和high之间的值都以默认的级数显示为中等亮度值。

           当使用imshow()同时输出多幅图像时,后面的图像总是会覆盖前面的图像。为了同时显示多幅图像,就要用到figure()函数。该函数的作用是建立图形窗口对象。例如:

    % figure
    imshow(IMG1)
    figure(5)
    imshow(IMG2)
    

           运行上述代码,显示结果如下:

    显示多幅图像
    3.2 关闭图形窗口

           要关闭图形窗口,使用close()函数。例如:

    close(5)
    

           括号中的参数是窗口句柄,该语句的作用是关闭Figure 5窗口。在默认情况下(即不输入任何参数),matlab会选择关闭当前窗口(也就是最后创建的一个窗口)。此外,我们还可以使用close all命令来关闭所有的图形窗口。

    3.3 同一窗口显示多幅图像

           此时需要用subplot()函数,该函数的语法形式为subplot(m,n,p)或subplot(m n p)。其中,m表示图排成m行,n表示图排成n列,p表示图所在的位置,p=1表示从左到右、从上到下的第一个位置。例如:

    figure;
    subplot(1,2,1),subimage(IMG1);
    title('lena');
    subplot(1,2,2),subimage(IMG2);
    title('baboon');
    

           运行结果如下:

    在同一窗口显示多幅图像

           函数title()作用是给子图加标题,而函数subimage()的作用则是显示子图,这里也可以换成imshow()。其中,subimage()函数会给图像加上坐标而imshow()则不会。此外,对图像而言,坐标原点位于左上角。

    参考资料

    1. 数字图像处理原理与实践MATLAB版 [左飞 著] 2014年版
    展开全文
  • MATLAB图像处理 (一)

    2020-09-20 04:05:10
    如果是彩色图像,则每幅图片可以分为RGB三通道分别表示。由于现在我们处理的几乎全是彩色图像,所以我们主要考虑彩色图像,暂不讨论黑白图像。我们拿下面这幅图像为例。顺便看看这个图像的属性。 一、读取文件提取...

    最近在做关于计算机视觉图像处理的相关东西。总结一下知识点。

    首先关于图像的知识,图像可以分为黑白照片或者彩色照片。每幅照片都是由一个个像素点构成。如果是彩色图像,则每幅图片可以分为RGB三通道分别表示。由于现在我们处理的几乎全是彩色图像,所以我们主要考虑彩色图像,暂不讨论黑白图像。我们拿下面这幅图像为例。顺便看看这个图像的属性。

    一、读取文件提取RGB三通道

    MATLAB读取文件可以分为读取图片和视频。我们这里是读取图片,等到读取视频的时候再总结视频。

    读取图片文件使用imread(),里面填的是图片的名称或者是图片的地址。

     1 %读取图片
     2 image = imread('1.jpg');
     3 figure;
     4 subplot(2,2,1)
     5 imshow(image);
     6 title('原始图像');
     7  %提取图片的RGB三通道
     8 image_double = double(image);
     9 R = image_double(:,:,1);
    10 G = image_double(:,:,2);
    11 B = image_double(:,:,3);
    12 %分别显示RGB三通道的图片信息
    13 subplot(2,2,2);
    14 imshow(uint8(R));
    15 title('红色通道');
    16 subplot(2,2,3);
    17 imshow(uint8(G));
    18 title('绿色通道');
    19 subplot(2,2,4);
    20 imshow(uint8(B));
    21 title('蓝色通道');
    
    View Code

    这里直接使用一行代码就可以读取图片信息了。

    可以在工作区看到原始图像image的信息。427*640*3,分别表示像素为高*宽为427*640,与图像信息相符合。3表示图片为RGB彩色图片。红绿蓝。原始图片的类型是uint8,所以将三个通道信息提取出来后为double类型,然后生成图像时在使用uint8格式转换。

    二、RGB三通道合成原始图像

    现在我们获得了RGB三个成分分量,现在我们将三个分量在合成为原始图像。

    1 %RGb合成原始图像
    2 mix(:,:,1) = R;
    3 mix(:,:,2) = G;
    4 mix(:,:,3) = B;
    5 figure ;
    6 imshow(uint8(mix));
    7 title('合成图像');
    
    View Code

    全部代码如下:

    代码一(直接提取RGB):

    %读取图片
    image = imread('1.jpg');
    figure;
    subplot(2,2,1)
    imshow(image);
    title('原始图像');
    R1 = image(:,:,1);
    G1 = image(:,:,2);
    B1 = image(:,:,2);
    %提取图片的RGB三通道
    % image_double = double(image);
    % R = image_double(:,:,1);
    % G = image_double(:,:,2);
    % B = image_double(:,:,3);
    %分别显示RGB三通道的图片信息
    subplot(2,2,2);
    imshow(uint8(R1));
    title('红色通道');
    subplot(2,2,3);
    imshow(uint8(G1));
    title('绿色通道');
    subplot(2,2,4);
    imshow(uint8(B1));
    title('蓝色通道');
    
    %RGb合成原始图像
    mix(:,:,1) = R1;
    mix(:,:,2) = G1;
    mix(:,:,3) = B1;
    figure ;
    imshow(uint8(mix));
    title('合成图像');
    
    View Code

    代码二:

     1 %读取图片
     2 image = imread('1.jpg');
     3 figure;
     4 subplot(2,2,1)
     5 imshow(image);
     6 title('原始图像');
     7  %提取图片的RGB三通道
     8 image_double = double(image);
     9 R = image_double(:,:,1);
    10 G = image_double(:,:,2);
    11 B = image_double(:,:,3);
    12 %分别显示RGB三通道的图片信息
    13 subplot(2,2,2);
    14 imshow(uint8(R));
    15 title('红色通道');
    16 subplot(2,2,3);
    17 imshow(uint8(G));
    18 title('绿色通道');
    19 subplot(2,2,4);
    20 imshow(uint8(B));
    21 title('蓝色通道');
    22 
    23 %RGb合成原始图像
    24 mix(:,:,1) = R;
    25 mix(:,:,2) = G;
    26 mix(:,:,3) = B;
    27 figure ;
    28 imshow(uint8(mix));
    29 title('合成图像');
    
    View Code
    展开全文
  • 图像处理(matlab

    万次阅读 2018-09-11 22:35:04
    1.基本函数: iread('文件路径'); idisp(); 2.一元操作: imd=idouble(im);... //将彩色图像转变成灰度图像。 ihist();//显示每一个像素值出现的次数 im=igamma(im,1/0.45); //伽马编码,一种非线性一...

    1.基本函数:

    iread('文件路径');

    idisp();

    2.一元操作:o[u,v]=f(I[u,v])

    imd=idouble(im);  //将像素从unit8(范围在0-255的整数像素)到范围在[0,1]的双精度值

    grey=imono(im);    //将彩色图像转变成灰度图像。

    ihist();//显示每一个像素值出现的次数

    im=igamma(im,1/0.45); //伽马编码,一种非线性一元操作

    3.二元操作:o[u,v]=f(I_{1}[u,v],I_{2}[u,v])

    isamesize(image1,image2);  //将2缩放并裁剪到跟1相同的大小

    ........

    4.空间操作o[u,v]=f(I[u+i,v+j])

     

    4.1互相关 o[u,v]=\sum _{(i,j)\epsilon w }I[u+i,v+j]K[i,j], K是互相关核,对于每一个输出像素,对应输入图像中的像素窗口w要逐个元素地与互相关核K相乘。

    在工具箱中,互相关使用函数iconv表示。iconv(image,K);

     

    4.1.1平滑处理(光滑化、模糊化或者散焦)

    K=ones(21,21)/21^2; //每一个输出像素都是输入图像中与之相对应的21x21相领像素的平均值  ->平均值滤波

    G(u,v)=\frac{1}{2\pi\sigma ^{2} }e^{-\frac{u^{2}+v^{2}}{2\sigma ^{2}}}  二维高斯函数(关于原点对称,曲线下方体积为1)的扩展由标准差参数\sigma控制。 ->高斯滤波

    K=kguass(5); //指定标准差为5像素

     

    4.1.2边界检测:
     lena=iread('C:\Users\Administrator\Desktop\matlab实验照片\2.jpeg','double','grey');

     p=lena(60,:);  //在v=60处图像中的一条水平线

    沿着这个横截面的一阶倒数是p^{^{'}}[v]=p[v]-p[v-1],一阶倒数可以用diff函数计算。->亮度变化的倒数

    在v点处的导数也可以写成对称的一阶差分:p^{^{'}}[v]=\frac{1}{2}(p[v+1]-p[v-1])

    它等同于和下面的一维互相关核求互相关运算:

                                                                     K=(-\frac{1}{2} 0 \frac{1}{2})

    将图像与这个核求互相关:

    K=[-0.5 0 0.5];

    idsip(iconv(lena,K),'invsigned')    ->图片具有高水平梯度的竖直边缘清晰可见。效果如下所示(上面为原图):

      

    利用索伯互相关核计算水平梯度,利用三行水平梯度的加权值。

    Du=ksobel,上图为原图,下面为处理之后的

    坎尼算子:

    算法大致流程:

    1、求图像与高斯平滑滤波器卷积:

    2、使用一阶有限差分计算偏导数的两个阵列P与Q:

    3、幅值和方位角:

    4、非极大值抑制(NMS ) :细化幅值图像中的屋脊带,即只保留幅值局部变化最大的点。

    将梯度角的变化范围减小到圆周的四个扇区之一,方向角和幅值分别为:

    非极大值抑制通过抑制梯度线上所有非屋脊峰值的幅值来细化M[i,j],中的梯度幅值屋脊.这一算法首先将梯度角θ[i,j]的变化范围减小到圆周的四个扇区之一

    edges=icanny(lena,2);效果如下所示:

    4.2模板匹配O[u,v]=s(T,W)

    函数s(T,W)是一个标量测度,用来描述两幅相同大小的图像T和W之间的相似性。

    常用方法有:绝对差值(SAD),差值平方和(SSD)以及互相关(NCC)

     

    展开全文
  • 图像处理之Matlab图像读取

    万次阅读 多人点赞 2017-05-29 12:50:45
    说到图像处理,第一步就是图像读取。Matlab最简单的就是imread函数,本节介绍imread的用法以及容易出错的地方

    说到图像处理,第一步就是图像读取。Matlab最简单的就是imread函数,本节介绍imread的用法以及容易出错的地方
    读取图片
    正如上图所示,在Matlab文档中,imread包括以上几种用法,但并不要求都要掌握,个人觉得会用一两种,其他了解语法即可。
    我们来介绍下最最常用的语句A = imread(filename)
    我们来读取一张图片

    >> a = imread('凝视.jpg');
    >> imtool(a)

    duqu
    如图所示,首先注意的是语法正确A = imread(‘凝视.jpg’);
    一.正确示范。
    他的意思是在当前路径里把文件名为“凝视.jpg”的图片数据读取到A中保存,那我们可以看到在图片最右边Workspace区域放着一些数据,这就是A的数据,我们看到这张图片是340*593*3大小,意思是340行,593列,3通道(RGB)的图片,右边的UINT8表示8位无符号的整型类型。(后面的imtool语句用于显示图片,这个将在后续细谈)
    补充一点小知识:
    想要清空Command Window,输入命令clc
    想要清空Workspace,输入命令clear
    想要关闭所有打开的窗口,输入命令close all
    想要观看图像信息,用whos

    二.踩坑
    好了,既然我们知道正确的写法,那我们来试试有什么坑。(敢于试错是干这行的一个优秀品质)
    1.为什么要分号?
    因为matlab是按行编译,一行一行编译,不写分好,就会直接出来编译结果,给你们看个例子就明白。
    juzhen
    上面创建一个a和b矩阵,a矩阵不用分号结尾,窗口直接显示内容,而b矩阵用了分号,并不显示内容,但是可以看到编译后,在workspace已经创建两个数组矩阵,我们也可以看到,点击变量名可以看到最上面有具体的数据。同理,如果我们读取图片a = imread(‘凝望.jpg’)不写分号,那么窗口就会出现一大波数据,刷刷刷地跳出来,那酸爽,那些数据就是保存在数组里面的像素了。
    小知识:
    如果你不写变量名,比如>>imread(‘凝望.jpg’);它很默认地给你个名字叫:ans
    当你想重新写一句语句和上面相同或相似的话,可以按键盘的上箭头按钮
    箭头
    这个快捷方式可以帮助你快速地修改语句,好用。

    2.英文半角符号
    这个学过编程的都应该知道吧,别整个中文“。”,也千万别用英文的全角符号“.”,至于为什么,我不知道。Matlab会出现:File “凝视.jpg” does not exist.

    3.路径
    这个是常会犯的,你记得你有那图片,也记得图片名称,但是你没有把他放在当前的路径里你叫人家怎么找,Matlab还没有那么强大到可以全搜索你电脑里面的图片文件。同样编译会出现 : does not exist。但是还有补救的方法,你可以给它指明可以去哪里找,例如:
    zairu
    我把图片‘凝视.jpg’放在D盘的build文件下面,结果不断地出错出错如图所示,乍一看,才发现把凝视写成凝望了,再一看,把build写成bulid,哈哈,我也只是个初学者,稍粗心就犯错,借此也说明写代码确实得聚精会神啊,这点BUG还容易改,但是如果你做的是大项目,写成百上千行代码,因为拼写错误而花了几个小时那实在是亏大了。

    好了,本次文件读写就写到这里,有什么疑问可以评论大家一起讨论学习,也许我们会有思想的火花。可能说的都是很琐碎很简单的东西,只要能给你一点点收获,这篇博客就有价值了。下节继续介绍其他函数。感谢观看

    展开全文
  • MATLAB(五) 图像处理--图像分割

    万次阅读 多人点赞 2018-05-11 14:00:14
    图像分割 一、基于边界的图像分割 1. 点检测 2.线检测 3.边缘检测 二、基于区域的图像分割 1.区域生长 2.区域分离和聚合 3.分水岭分割 三、阈值分割 1.使用Otsu方法进行全局阈值分割 2.使用Otsu方法进行全局...
  • 图像入门:MATLAB图像识别

    万次阅读 多人点赞 2018-07-14 15:07:54
    初学数字图像处理,做一个练习,识别图中的图形形状,颜色,位置,面积,周长f=imread('C:\Users\QHJ\Desktop\demo.png'); f=f(:,:,3); f=histeq(f,256); %增强对比度 f=im2bw(f,0.386); rowhigh=102+276-1; %提取...
  • Matlab图像的读取和存储

    万次阅读 2016-09-01 10:20:01
    图像处理,主要是对已有的图像进行处理,然后再存储起来,并不是无中生有,创造出一幅图像。因此,图像的读取和存储显得比较重要。  这里创建test.m文件放入已经创建的Matlab文件夹里,之后的操作都在这里进行...
  • matlab里的图像处理函数

    万次阅读 多人点赞 2019-02-19 15:56:54
    一、imfinfo函数——查看图像文件信息,注意参数是文件路径和文件名,不是图像对应的矩阵。 >> imfinfo('C:\Users\zhulf\Desktop\1.jpg') ans =   Filename: 'C:\Users\zhulf\Desktop\1.jpg'  ...
  • matlab图像进行变换

    千次阅读 2018-09-19 08:42:23
    线性点运算 a=imread('20151130101641521.tif');...title('原始图像'); b1=a+45; %灰度值增加45 subplot(232); imshow(b1); title('灰度值增加'); b2=a*1.35; %图像对比度增大 subplot(233); imshow(b2); title('...
  • MatLab绘制图像

    千次阅读 多人点赞 2019-05-20 19:26:47
    1 二维图像 常规函数图 plot函数 figure(1) x1=-10:0.1:10; y1=x1.^2; plot(x1,y1,'r','lineWidth',1); xlabel('x轴') ylabel('y轴') title('二维图像') grid on 函数图 饼形...
  • 写论文过程中发现将MATLAB图像直接导出会有很多的空白出现,在网上查了很多方法都存在一定的问题,本文介绍利用visio来保存无空白图像。 现有方法及缺点 截图保存然后转pdf:在截图时matlab图片的背景色是灰色的,...
  • Matlab图像几何变换之图像旋转

    万次阅读 多人点赞 2019-10-26 10:52:33
    Matlab图像旋转 旋转的原理如下: 点p0p_0绕坐标原点逆时针方向旋转θ\theta角度得到点p1p_1. 从①②可以得到旋转变换的矩阵公式: [x1y11]\begin{bmatrix}x_1&y_1&1\end{bmatrix}=[x0y01]\begin{b...
  • 基于MATLAB图像处理的中值滤波、均值滤波以及高斯滤波的实现与对比 1.背景知识 中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值. 中值滤波是基于排序...
  • matlab图像处理——平滑滤波

    万次阅读 2018-11-01 20:52:00
    平滑滤波——matlab图像处理 平滑滤波的目的是消除或尽量减少噪声,改善图像的质量。假设加性噪声是随机独立分布,这样利用图像像素领域的平均或加权平均即可有效地抑制噪声干扰。从信号分析的观点来看,图像平滑...
  • matlab图像剪裁命令imcrop()

    万次阅读 2018-07-11 09:05:41
    matlab图像剪裁命令imcrop()调用格式:I2=imcrop(I,RECT);X2=imcrop(X,MAP,RECT);RGB2=imcrop(RGB,RECT);其中,I、X、RGB分别对应灰度图像、索引图像、RGB图像的数据矩阵,MAP为索引图像颜色表,I2、X2...
  • matlab 图像坐标系

    千次阅读 2018-10-15 13:12:44
    matlab 图像图像坐标系与plot、 imrotate坐标系的区别   图像坐标系是以图像左上角为原点,访问图像像素点img(m,n),如下图所示:   plot的坐标系,以图像左上角为原点,在图像中划线时,plot(x,y)...
  • Matlab图像的几何变换之图像镜像

    千次阅读 2017-12-05 18:48:12
    Matlab图像镜像 Matlab图像镜像分为水平镜像和竖直镜像,水平镜像代码如下: clc I=rgb2gray(imread('DORMITORY.JPG')); figure,imshow(I); title('原图'); [r,c]=size(I);
  • Matlab实现图像的比例缩放

    万次阅读 2019-07-01 21:55:37
    以灰度图像circuit.tif为例,利用Matlab图像处理工具箱中的imresize函数对图像进行比例缩放变换。要求:创建4个figure窗口(不可以用subplot,显示不出来放大效果),分别用于显示原始图像、等比例放大1.5倍后的图像...
  • matlab图像边缘检测分析

    千次阅读 2019-10-18 14:16:26
    更多MATLAB图像处理视频请点击  http://study.163.com/course/courseMain.htm?courseId=1003594013      所谓边缘是指其周围像素灰度有变化的那些像素的集合。边缘广泛存在于物体与...
1 2 3 4 5 ... 20
收藏数 91,320
精华内容 36,528
关键字:

matlab图像