精华内容
参与话题
问答
  • Matlab图像处理入门教程(菜鸟级)

    万次阅读 多人点赞 2017-03-18 11:22:37
    1,图像的读入和显示: (1)图像读入:A=imread('文件名',文件格式) [X,map]=imread('文件名') %X代表索引图像矩阵,map为颜色映射表 (2)图像显示:image(A); 2. 图像写回 A=imwrite('文件名',...
    1,图像的读入和显示:

    (1)图像读入:A=imread('文件名',文件格式)
    [X,map]=imread('文件名') %X代表索引图像矩阵,map为颜色映射表
    (2)图像显示:image(A);
    2. 图像写回
    A=imwrite('文件名',文件格式)
    [X,map]=imwrite('文件名')%注意,当只写文件名时,它应带有扩展名
    3.获取图像信息

    info=iminfo('文件名')

    4.标准图像显示技术
    (1)imshow(I,n)%显示灰度图像,n为灰度级数
    (2)imshow(I,[low,high])%[low,high]为图像数据的值域(可为空[ ])
    (3)imshow(BW)%显示二值图像

    (4)imshow(X,map)%显示索引色图像


    5.图像的运算

    (1)Z=imadd(X,Y)%图像的加运算,X,Y是输入的两幅图像,其中一个可以是常数
    (2)Z=imsubtract(X,Y)%图像的减运算,Y可以是常数
    (3)Z=immiltiply(X,y)%图像的乘运算,Y也可以是常数

    (4)Z=imdivide(X,y)%图像的除运算,Y也可以是常数

    6.图像的类型转换

    (1)RGB=ind2rgb(X,map)%索引图转换为真彩色图
    (2)I=mat2gray(A)%将一个数据矩阵转换为灰度图
    (3)I=rgb2gray(RGB)%将一副灰度图转换为真彩色图
    (4)[X,map]=rgb2ind(RGB,n)%将RGB图转换为索引色图
    (5)BW=im2bw(I,level)%将真彩色图或灰度图转换为二值图,level为阈值
    BW=im2bw(X,map,level)%将索引色图转换为二值图

    (6)I=ind2gray(X,map)%将索引色图转换为灰度图


    7.傅里叶变换

    (1)Y=fft2(x,m,n)%二维离散傅里叶快速变换,x为要进行傅里叶变换的矩阵,m、n是返回的变换矩阵Y的行数和列数。
    (2)Y=ifft2(x,m,n)%二维离散傅里叶反变换
    (3)Y1=fftshift(Y)%把傅里叶变换操作得到的结果中零频率成分移到矩阵中心,这样利于观察频谱。
    8.离散余弦变换

    (1)D=dct2(A,m,n)%二维离散余弦变换,A是输入图像,B是返回的DCT变换系数,m、n为D的行数和列数
    (2)D=idct(A,m,n)%e二维离散余弦逆变换。

    (3)D=dctmtx(n)%返回DCT变换矩阵

    9.Radon变换

    [R,xp]=radon(I,theta)%I为图像矩阵,theta为角度

    I=iradon(R,thrta)%逆Radon变换

    10.图像的增强(1)

    (1)imhist(I)%显示一副图像的直方图
    (2)J=histeq(I)%直方图均衡化
    (3)J=imadjust(I,[low_in;high_in],[low_out;high_out],gamma)%调整图像灰度值
    (4)J=adapthisteq(I)%有限对比自适应直方图均衡化

    (5)S=decorrestretch(I)%去相关色度拉伸

    11.图像的增强(2)
    B=imfilter(A,H,option1,option2,...)
    A是输入图像,H是卷积核或相关核,option是一些可选参数。
    注:权重矩阵称为卷积核,也称为滤波器。卷积核是相关核旋转180度得到的,可选参数参看help

    其中H也用H=fspecial(type,parameters)可自定义

    12.中值滤波器
    B=medfilt2(A,[m,n])%A是输入的图像,[m,n]是邻域的大小

    13.自适应滤波器

    B=wiener2(A,[m,n])

    14.图像的分析
    P=impixel(I)%交互式获取图像像素值
    P=impixel(I,c,r)%指定点坐标像素值,c、r为行坐标和列坐标
    C=improfile(I,xi,yi,n,method)%创建图像强度曲线,n规定了计算图像强度点的个数,xi、yi规定了空间直线端点坐标,method是插值方法(nearest,bilinrar,bicubic)

    imcontour(I,n,linespec)%显示图像数据的等值线图

    15.图像的统计信息
    B=mean(A)%计算A的均值
    b=std2(A)%计算A的标准差
    r=corr2(A,B)%A,B为输入二维矩阵,r是返回的协方差系数

    
    展开全文
  • 实验工具:MATLAB软件 课程设计时间:2008年12月 实 验 部 分 1. 图像变换 程序代码及说明 clear all N=100; f=zeros(50,50); %产生一个50*50的全0数组 f(15:35,23:28)=1; %定义图像数组,从15行...

    图像变换(傅立叶变换), 图像增强, 边缘检测, 滤波, 图像压缩等.

    实验工具:MATLAB软件

    课程设计时间:2008年12月

    实 验 部 分

    1.     图像变换

    程序代码及说明

    clear all

    N=100;

    f=zeros(50,50);          %产生一个50*50的全0数组

    f(15:35,23:28)=1;       

     %定义图像数组,从15行到35行,23列到28列附值为1,为白色,其他区域为黑色

    figure(1)                %创建窗口的图形对象,句柄为1

    imshow(f,'notruesize')     %显示图像f

    F=fft2(f,N,N);           %在二维傅立叶变换前把f截断或者添加0,使其成为N*N的数组

    F2=fftshift(abs(F));       %把傅立叶变换的零频率部分移到频谱的中间

    figure(2)

    x=1:N;y=1:N;           %定义x和y的范围

    mesh(x,y,F2(x,y));colormap(gray);colorbar 

    %绘制立体网状图,将图形对象的色度改为灰度图像,colorbar给坐标轴添加色彩条

      %构建一个类似于figure(1)的矩形函数

     N=200;

    f=zeros(100,100);

    f(30:70,45:55)=1;     

     %定义图像数组,从30行到70行,45列到55列附值为1,为白色,其他区域为黑色

    imshow(f,'notruesize');

     %然后对f进行二维快速傅立叶变换:以下列出你自己编写的代码…

    N=200;

    f=zeros(100,100);

    f(30:70,45:55)=1;

    imshow(f,'notruesize');

    title('原始图像');

    F=fft2(f,N,N);                 %对图像f进行二维快速傅立叶变换

    grid on                       %打开网格线

    axis on                       %打开坐标轴

    imshow(F,[-1,5],'notruesize');     %显示傅立叶变换后的图像,图像数据的值域为[-1,5]

    x=1:N;y=1:N;

    title('二维快速傅立叶变换后的图像');

    mesh(abs(F));                 %绘制F的频谱图

    title('傅立叶变换后的频谱图');

    %然后对上述二维快速傅立叶变换提高分辨率:

        要提高二维快速傅立叶变换的分辨率,在采样率一定的情况下,增大采

    样点数N即可。对应的频谱图见测试结果。

      N=300;

    f=zeros(100,100);

    f(30:70,45:55)=1;

    figure(1)

    imshow(f,'notruesize');

    title('原始图像');

    F=fft2(f,N,N);

    axis on

    figure(2)

    imshow(F,[-1,5],'notruesize');

    title('二维快速傅立叶变换后的图像');

    x=1:N;y=1:N;

    figure(3)

    mesh(abs(F));

    title('傅立叶变换后的频谱图');

     

    N=400;

    f=zeros(100,100);

    f(30:70,45:55)=1;

    figure(1)

    imshow(f,'notruesize');

    title('原始图像');

    F=fft2(f,N,N);

    axis on

    figure(2)

    imshow(F,[-1,5],'notruesize');

    title('二维快速傅立叶变换后的图像');

    x=1:N;y=1:N;

    figure(3)

    mesh(abs(F));

    title('傅立叶变换后的频谱图');

      �系数移动(使用函数fftshift)

        N=200;

    f=zeros(100,100);

    f(30:70,45:55)=1;

    figure(1)

    imshow(f,'notruesize');

    title('原始图像');

    F=fft2(f,N,N);

    axis on

    figure(2)

    imshow(F,[-1,5],'notruesize');

    title('二维快速傅立叶变换后的图像');

    x=1:N;y=1:N;

    figure(3)

    mesh(fftshift(abs(F))); 

    %把零频率部分移到频谱的中间

    title('傅立叶变换后的频谱图');

     %滤波器频率响应

    x=1:N;y=1:N;         

    mesh(x,y,F2(x,y));colormap(gray);colorbar    

    %绘制立体网状图,将图形对象的色度改为灰度图像,colorbar给坐标轴添加色彩条

      

    测试结果图:

     

    1》对f进行二维快速傅立叶变换

    (请自己运行查看)

       2》对上述二维快速傅立叶变换提高分辨率

      N=300时:                         N=400时:

      N=800时:                              N=1000时:

      (请自己运行查看)

      从傅立叶变换的频谱图中可以看出,提高分辨率以后,其边缘更加平滑,锯齿状明显减弱。但其傅立叶变换后的图像没有明显改变。 

    3》DC系数移动

    其系数移动以后,频谱分量都集中到了频谱的中间。

    4》滤波器频率响应

    (请自己运行查看)

     

    2. 图像增强

    图像增强是指按特定的需要突出一幅图像中的某些信息,同时,消弱或去除某些不需要的信息的处理方法。其主要目的是使处理后的图像对某些特定的应用比原来的图像更加有效。图像增强技术主要包含直方图修改处理、图像平滑化处理、图像尖锐化处理、和彩色处理技术等。图像增强有图像对比度增强、亮度增强,轮廓增强等等。

    下面利用直方图统计算法对灰度图像进行增强:

    程序代码:

    I=imread('cameraman.tif');

    subplot(121)

    imshow(I);

    title('原始图像');

    subplot(122)

    imhist(I,64)       

    %绘制图像的直方图,n=64为灰度图像灰度级,若I为灰度图像,默认n=256;

    若I为二值图像,默认n=2。

    title('图像的直方图');

    (请自己运行查看) 

    n=256时:

    (请自己运行查看)

    下面利用直方图均衡化增强图像的对比度:

    I=imread('cameraman.tif');

    J=histeq(I);                    

    %将灰度图像转换成具有64(默认)个离散灰度级的灰度图像

    imshow(I)

    title('原始图像')

    figure,imshow(J)

    title('直方图均衡化后的图像')

    figure(1)

    subplot(121);imhist(I,64)

    title('原始图像的直方图')

    subplot(122);imhist(J,64)

    title('均衡化的直方图')

                 (请自己运行查看)

     

    分析:从上图中可以看出,用直方图均衡化后,图像的直方图的灰度间隔被拉大了,均衡化的图像的一些细节显示了出来,这有利于图像的分析和识别。直方图均衡化就是通过变换函数histeq将原图的直方图调整为具有“平坦”倾向的直方图,然后用均衡直方图校正图像。

     

    下面利用直方图规定化对图像进行增强:

    I=imread('cameraman.tif');

    figure,imshow(I);

    title('原始图像');

    hgram=50:2:250;       %规定化函数

    J=histeq(I,hgram);

    figure,imshow(J);

    title('直方图规定化后的图像');

    figure,imhist(I,64);

    title('原始图像的直方图');

    figure,imhist(J,64);

    title('直方图规定化后的直方图');

    运行结果:

    (请自己运行查看)

     

    变换灰度间隔后的图像和直方图:

    hgram=50:1:250;                    hgram=50:5:250;

      

    3. 图像重建

    图像重建的最典型的应用是医学上的计算机断层摄影技术(CT技术)。它用于人体头部、腹部等内部器官的无损伤诊断,其基本方法就是根据人体截面投影,经过计算机处理来重建截面图像。在人体中把需要扫描的部分取出一定厚度的断层面,再把断层面分成许多小的方块。当一束较窄的射线通过每个方块后强度就有一定程度的衰减,衰减的量由此方块的分子构成和组织密度决定。如果通过各种角度重复上述过程以获得一系列强度分布曲线,就有可能从这些数据中计算每一方块的衰减量。这样就能够重建断层或三维图像。

    目前提出的图像重建方法有以下五种:

    (1)联立方程法(也称矩阵法);

    (2)逆投影法;

    (3)付立叶变换法;

    (4)滤波──逆投影法(也称卷积法);

    (5)逐次逼近法。

    滤波──逆投影法是当前用得较多的一种图像重建方法,在当代射线CT系统中几乎都用这种方法构成系统。它的特点是精度高,能快速实现。

    在图像处理的工具箱中,MATLAB提供了一个计算图像沿着指定方向上的投影的函数——radon函数。

    iradon函数可以实现radon逆变换,radon逆变换通常应用于X线断层摄影术中,可以从投影数据中重构图像。

    下面利用radon函数和iradon函数计算图像的投影并从投影中重建图像,将Shepp-Logan的大脑图作为测试图。

     

    函数radon和函数iradon的调用格式:

    [R,xp]=radon(I,theta)   计算图像I在theta向量所指定的方向上的radon变换,I表示待处理的图像,theta表示radon变换的方向角度,可以是标量或向量值,返回值 R的每一列对应图像I在theta某一角度的radon变换值,xp向量表示沿着x'轴对应的坐标值。

    IR=iradon(R,theta)     利用R各列中投影值来构造图像I的近似值。投影数越多,获得的图像越接近原始图像,角度theta必须是固定增量的均匀向量。

     

    程序代码:

     

    P=phantom(256);   %用phantom函数产生Sheep-Logan的大脑图,n为图像p中的行列数,默认为256

    imshow(P)

    title('原始图像')

    %以下为三种不同角度的投影模式

    theta1=0:10:170;[R1,xp]=radon(P,theta1);   %存在18个角度投影

    theta2=0:5:175;[R2,xp]=radon(P,theta2);    %存在36个角度投影

    theta3=0:2:178;[R3,xp]=radon(P,theta3);    %存在90个角度投影

    figure,imagesc(theta3,xp,R3);colormap(hot);colorbar;

    %显示图像Sheep-Logan的radon变换

    title('经radon变换后的图像')

    xlabel('\theta');ylabel('x\prime');     %定义坐标轴

    %用三种情况的逆radon变换来重建图像

    I1=iradon(R1,10);

    I2=iradon(R2,5);

    I3=iradon(R3,2);

    figure,imshow(I1)

    title('角度增值为10时的iradon变换图像')

    figure,imshow(I2)

    title('角度增值为5时的iradon变换图像')

    figure,imshow(I3)

    title('角度增值为2时的iradon变换图像')

     

    运行结果图:

               (请自己运行查看)

     

    由上面重建的图像中可以看出,只用18个投影来重建图像效果很差,而36个投影来重建的图像要好的多,90个投影来重建的图像质量更好,失真也很小,由于R1重建图像的投影太少,所以存在许多虚假点,重建的效果与投影数目相关,投影数目越多图像重建的效果越好,所以要提高重建图像的质量,就需要增加投影角度的数目。

    除此之外,还可以在Fan-Beam变换数据中用ifaanbeam函数重建图像。

     

    4. 滤波

    4.1 目的

    运用中值滤波克服线性滤波器所带来的图像细节模糊。

    4.2 使用设备

    PC兼容机一台,操作系统为Windows2000(或Windows98,WindowsXP,以下默认为Windows2000)

    4.3 使用滤波对图像进行增强

        4.3.1 线性滤波(邻域平均)

    线性低通滤波器最常用的是线性平滑滤波器,这种滤波器的所有系数都是正的,也称邻域平均。邻域平均减弱或消除了傅立叶变换的高频分量,对噪声的消除有所增强,但是由于平均而使图像变得更为模糊,细节的锐化程度逐渐减弱。

    下面使用不同的平滑模板对图像进行滤波:(二维线性滤波fliter2)

    程序代码:

    I=imread('cameraman.tif');

    imshow(I)

    title('原始图像')

    J=imnoise(I,'salt & pepper');    %添加盐椒噪声,噪声密度为默认值0.05

    figure,imshow(J)

    title('添加盐椒噪声后的图像')

    K1=filter2(fspecial('average',3),J)/255;   %应用3×3邻域窗口法

    figure,imshow(K1)

    title('3×3窗的邻域平均滤波图像')

    K2=filter2(fspecial('average',7),J)/255;   %应用7×7邻域窗口法

    figure,imshow(K2)

    title('7×7窗的邻域平均滤波图像')

    K3=filter2(fspecial('average',9),J)/255;   %应用9×9邻域窗口法

    figure,imshow(K3)

    title('9×9窗的邻域平均滤波图像')

    K4=filter2(fspecial('average',11),J)/255;   %应用11×11邻域窗口法

    figure,imshow(K4)

    title('11×11窗的邻域平均滤波图像')

    运行结果图:

                     (请自己运行查看)

     

    4.3.2 中值滤波

    中值滤波可以保留目标边缘,这是中值滤波器相对于均值滤波器的最大优势。中值滤波具有去噪的性能,可以消除孤立的噪声点,可以用来减弱随机干扰和脉冲干扰,但是边缘不模糊。

    程序代码:

    I=imread('cameraman.tif');

    imshow(I)

    title('原始图像')

    J=imnoise(I,'salt & pepper',0.02);  %添加盐椒噪声,噪声密度为0.02

    figure,imshow(J)

    title('添加盐椒噪声后的图像')

    K1=medfilt2(J);               %在默认的3×3的邻域窗中进行中值滤波

    figure,imshow(K1)

    title('默认的3×3的邻域窗的中值滤波图像')

    K2=medfilt2(J,[5 5]);           %在5×5的邻域窗中进行中值滤波

    figure,imshow(K2)

    title('5×5的邻域窗的中值滤波图像')

    运行结果图:

    (请自己运行查看)

     

    从上可见,中值滤波的效果要比邻域平均的低通滤波效果好,中值滤波以后的图像的轮廓比较清晰,而且使用较小的模板得到的视觉效果反而好一些。

     

    4.3.3 锐化滤波

    图像锐化处理的目的是使模糊图像变得清晰,锐化滤波器减弱或消除了傅立叶空间的低频分量,保留高频分量,从而加强了图像的轮廓,使图像看起来比较清晰。

    下面应用Laplacian算子对图像进行锐化处理:

    Laplacian算子是线性二次微分算子,其格式为:h = fspecial('laplacian', alpha),返回一个3×3的滤波器来近似二维Laplacian算子的形状,参数alpha决定了Laplacian算子的形状,alpha的取值范围为0.0~1.0,默认的值为0.2。

     

    程序代码:

    %应用Laplacian算子对图像进行锐化

    I=imread('cameraman.tif');

    imshow(I)

    title('原始图像')

    H=fspecial('laplacian');    

    %应用laplacian算子滤波锐化图像

    laplacianH=filter2(H,I);

    figure,imshow(laplacianH)

    title('laplacian算子锐化后的图像')

     

    运行结果图:

    (请自己运行查看)

     

    分析:由图可以看出,应用了Laplacian算子对图像锐化以后,将图像区域的边缘轮廓勾划了出来,因此Laplacian算子对于边缘检测也具有很好的功效。

     

     

    5. 边缘检测

    下面利用sobel算子对图像进行边缘检测:

    使用edge函数实现图像的边缘检测,其调用格式为:

    BW=edge(I,'sobel',thresh,direction)   根据指定的敏感阈值thresh用Sobel算子对图像进行边缘检测,edge函数忽略了所有小于阈值的边缘,如果没有指定阈值thresh或为空,函数自动选择参数值,direction指定Sobel算子边缘检测的方向,其参数值为'horizontal','vertical'或'both'(默认)。

     

    程序代码:

    I=imread('cameraman.tif');

    imshow(I)

    title('原始图像')

    BW=edge(I,'sobel');  

    %以自动域值选择法对图像进行Sobel算子边缘检测

    figure,imshow(BW);

    title('自动域值的Sobel算子边缘检测')

    [BW,thresh]=edge(I,'sobel');  

    %返回当前Sobel算子边缘检测的阈值

    disp('sobel算子自动选择的阈值为:')

    disp(thresh)

    BW1=edge(I,'sobel',0.02,'horizontal');  

    %以域值为0.02水平方向对图像进行Sobel算子边缘检测

    figure,imshow(BW1)

    title('域值为0.02的水平方向的sobel算子检测')

    BW2=edge(I,'sobel',0.02,'vertical');

    %以域值为0.02垂直方向对图像进行Sobel算子边缘检测

    figure,imshow(BW2)

    title('域值为0.02的垂直方向的sobel算子检测')

    BW3=edge(I,'sobel',0.05,'horizontal');

    %以域值为0.05水平方向对图像进行Sobel算子边缘检测

    figure,imshow(BW3)

    title('域值为0.05的水平方向的sobel算子检测')

    BW4=edge(I,'sobel',0.05,'vertical');

    %以域值为0.05垂直方向对图像进行Sobel算子边缘检测

    figure,imshow(BW4)

    title('域值为0.05的垂直方向的sobel算子检测') 

    测试结果图:

               (请自己运行查看)

    sobel算子自动选择的阈值为:0.1433

    由图可以看出,在采用水平和垂直方向的Sobel算子对图像进行边缘检测时,分别对应的水平和垂直方向上的边缘有较强的响应,阈值越小,检测的图像的边缘细节数越多,而增大阈值时,有些轮廓则未能检测出。

     

    问题与思考:

    根据Prewitt算子的定义设计实现用Prewitt算子进行图像的边缘检测。

    其用法和Sobel算子类似。其调用格式为:

    BW=edge(I,'prewitt',thresh,direction) 根据指定的敏感阈值thresh用Prewitt算子对图像进行边缘检测。

     

    程序代码: 

    I=imread('cameraman.tif');

    imshow(I)

    title('原始图像')

    BW=edge(I,'prewitt'); 

    %以自动域值选择法对图像进行Prewitt算子边缘检测

    figure,imshow(BW);

    title('自动域值的prewitt算子边缘检测')

    [BW,thresh]=edge(I,'prewitt');  

    %返回当前Prewitt算子边缘检测的阈值

    disp('prewitt算子自动选择的阈值为:')

    disp(thresh)

    BW1=edge(I,'prewitt',0.02,'horizontal');  

    %以域值为0.02水平方向对图像进行Prewitt算子边缘检测

    figure,imshow(BW1)

    title('域值为0.02的水平方向的prewitt算子检测')

    BW2=edge(I,'prewitt',0.02,'vertical');

    %以域值为0.02垂直方向对图像进行Prewitt算子边缘检测

    figure,imshow(BW2)

    title('域值为0.02的垂直方向的prewitt算子检测')

    BW3=edge(I,'prewitt',0.05,'horizontal');

    %以域值为0.05水平方向对图像进行Prewitt算子边缘检测

    figure,imshow(BW3)

    title('域值为0.05的水平方向的prewitt算子检测')

    BW4=edge(I,'prewitt',0.05,'vertical');

    %以域值为0.05垂直方向对图像进行Prewitt算子边缘检测

    figure,imshow(BW4)

    title('域值为0.05的垂直方向的prewitt算子检测')

     

    测试结果图:

    (请自己运行查看)

     

         prewitt算子自动选择的阈值为:0.1399

     

    6. 图像压缩

    图像压缩就是就是通过去除这些数据冗余来减少表示数据所需的比特数,去除多余数据。以数学的观点来看,这一过程实际上就是将二维像素阵列变换为一个在统计上无关联的数据集合。

      图像压缩是指以较少的比特有损或无损地表示原来的像素矩阵的技术,也称图像编码。

    图像数据之所以能被压缩,就是因为数据中存在着冗余。图像数据的冗余主要表现为:图像中相邻像素间的相关性引起的空间冗余;图像序列中不同帧之间存在相关性引起的时间冗余;不同彩色平面或频谱带的相关性引起的频谱冗余。 

        从压缩编码算法原理上可以分类为:

    (1)无损压缩编码种类:哈夫曼编码、算术编码、行程编码、Lempel zev编码

    (2)有损压缩编码种类:

    预测编码:DPCM,运动补偿 

    频率域方法:正交变换编码(如DCT),子带编码 

    空间域方法:统计分块编码 

    模型方法:分形编码,模型基编码

    基于重要性:滤波,子采样,比特分配,矢量量化

    (3)混合编码 ?JBIG,H261,JPEG,MPEG等技术标准

     

    利用余弦变换实现图像压缩:

    DCT先将整体图像分成N×N像素块(一般N=8 ,即64个像素块),再对N×N块像素逐一进行DCT变换。由于大多数图像高频分量较小,相应于图像高频成分的失真不太敏感,可以用更粗的量化,在保证所要求的图质下,舍弃某些次要信息。

     

    程序代码:

    I=imread('cameraman.tif');

    imshow(I);

    title('原始图像')

    disp('原始图像大小:')

    whos('I')

    I=im2double(I);

    %图像类型存储转换,将图像矩阵转换成双精度类型

    T=dctmtx(8);

    %离散余弦变换矩阵

    B=blkproc(I,[8 8],'P1*x*P2',T,T');

    mask=[1 1 1 1 0 0 0 0

              1 1 1 0 0 0 0 0

              1 1 0 0 0 0 0 0

              1 0 0 0 0 0 0 0

              0 0 0 0 0 0 0 0

              0 0 0 0 0 0 0 0

              0 0 0 0 0 0 0 0

              0 0 0 0 0 0 0 0];

    B2=blkproc(B,[8 8],'P1.*x',mask);

    I2=blkproc(B2,[8 8],'P1*x*P2',T',T);

    figure,imshow(I2);

    title('压缩后的图像')

    disp('压缩图像的大小:')

    whos('I2')

     

    运行结果:

                   (请自己运行查看)

     

    原始图像大小:

      Name        Size              Bytes  Class    Attributes

      I         256x256            65536  uint8             

    压缩图像的大小:

      Name        Size              Bytes  Class     Attributes

      I2        256x256            524288  double

     

    分析:由运行结果可以看出,经过DCT变换以后图像的大小几乎没有改变,我们知道DCT是一种空间变换,DCT变换的最大特点是对于一般的图像都能够将像块的能量集中于少数低频DCT系数上,这样就可能只编码和传输少数系数而不严重影响图像质量。DCT不能直接对图像产生压缩作用,但对图像的能量具有很好的集中效果,为压缩打下了基础。例如:一帧图像内容以不同的亮度和色度像素分布体现出来,而这些像素的分布依图像内容而变,毫无规律可言。但是通过离散余弦变换(DCT),像素分布就有了规律。代表低频成份的量分布于左上角,而越高频率成份越向右下角分布。然后根据人眼视觉特性,去掉一些不影响图像基本内容的细节(高频分量),从而达到压缩码率的目的。

     

    利用小波变换实现图像压缩:

     

    程序代码:

    clear all

    I=imread('cameraman.tif');

    imshow(I);                   %显示图像

    title('原始图像')

    disp('原始图像I的大小:');

    whos('I')

    I=im2double(I);

    [c,s]=wavedec2(I,2,'bior3.7');     %对图像用小波进行层分解

    cal=appcoef2(c,s,'bior3.7',1);     %提取小波分解结构中的一层的低频系数和高频系数

    ch1=detcoef2('h',c,s,1);          %提取二维水平方向细节系数

    cv1=detcoef2('v',c,s,1);          %提取二维垂直方向细节系数

    cd1=detcoef2('d',c,s,1);          %提取二维对角线方向细节系数

    ca1=appcoef2(c,s,'bior3.7',1);     %保留小波分解第一层低频信息

    ca1=wcodemat(ca1,440,'mat',0);   %首先对第一层信息进行量化编码

    ca1=0.5*ca1;                  %改变图像高度

    figure,image(ca1);              %显示压缩后的图象

    title('第一次压缩后的图像')

    disp('第一次压缩图像的大小为:')

    whos('ca1')

    ca2=appcoef2(c,s,'bior3.7',2);     %保留小波分解第二层低频信息进行压缩

    ca2=wcodemat(ca2,440,'mat',0);   %首先对第二层信息进行量化编码

    ca2=0.25*ca2;                 %改变图像高度

    figure,image(ca2);              %显示压缩后的图象

    title('第二次压缩后的图像')

    disp('第二次压缩图像的大小为:')

    whos('ca2')

    运行结果:

              (请自己运行查看)

    原始图像I的大小:

      Name      Size                   Bytes  Class

      I       256x256                  65536  uint8 array

    Grand total is 65536 elements using 65536 bytes

    第一次压缩图像的大小为:

      Name      Size                   Bytes  Class

      ca1     135x135                 145800  double array

    Grand total is 18225 elements using 145800 bytes

    第二次压缩图像的大小为:

      Name      Size                   Bytes  Class

      ca2      75x75                   45000  double array

    Grand total is 5625 elements using 45000 bytes

     

    分析:利用小波变换实现图像压缩,是利用小波分解图像的高频部分,只保留低频部分,从图中可以看出,第一次压缩是提取图像中小波分解的第一层低频信息,此时压缩效果较好,第二次压缩是提取第二层的低频部分,其压缩效果远不如第一次压

    展开全文
  • MATLAB图像处理

    万人学习 2017-01-18 14:22:18
    全面系统的学习MATLAB图像处理中的应用
  • 图像处理matlab

    万次阅读 2018-09-07 22:44:43
    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--数字图像处理 图像锐化(纯代码篇)

    万次阅读 多人点赞 2019-09-19 17:41:27
    图像锐化(image sharpening)是补偿图像的轮廓,增强图像的边缘及灰度跳变的部分,使图像变得清晰,分为空间域处理和频域处理两类。图像锐化是为了突出图像上地物的边缘、轮廓,或某些线性目标要素的特征。这种滤波...

    图像锐化

    概念:
    图像锐化(image sharpening)是补偿图像的轮廓,增强图像的边缘及灰度跳变的部分,使图像变得清晰,分为空间域处理和频域处理两类。图像锐化是为了突出图像上地物的边缘、轮廓,或某些线性目标要素的特征。这种滤波方法提高了地物边缘与周围像元之间的反差,因此也被称为边缘增强。

    我的理解:
    图像锐化就是通过使得图像的边缘更加突出,可以是原图与原图的高频部分叠加而成。

    Sobel算子

     I=imread('a2.jpg'); %读取图像
    I1=rgb2gray(I); %将彩色图变成灰色图
    imshow(I1),title('原图');
    
    model=[-1,0,1;
           -2,0,2;
           -1,0,1];
    [m,n]=size(I1);
    I2=double(I1);
    
    for i=2:m-1
        for j=2:n-1
            I2(i,j)=I1(i+1,j+1)+2*I1(i+1,j)+I1(i+1,j-1)-I1(i-1,j+1)-2*I1(i-1,j)-I1(i-1,j-1);
        end
    end
    figure,
    imshow(I2),title('边缘提取后的图像');
    I2 = I2 + double(I1);
    figure,
    imshow(uint8(I2)),title('锐化后的图像');
    

    效果图
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    Robert算子

     I=imread('a2.jpg'); %读取图像
    I1=rgb2gray(I); %将彩色图变成灰色图
    imshow(I1),title('原图');
    model=[0,-1;1,0];
    [m,n]=size(I1);
    I2=double(I1);
    for i=2:m-1
        for j=2:n-1
            I2(i,j)=I1(i+1,j)-I1(i,j+1);
        end
    end
    figure,imshow(I2),title('边缘提取后的图像');
    I2 = I2 + double(I1);
    
    figure,
    imshow(uint8(I2)),title('锐化后的图像');
    

    效果图
    在这里插入图片描述
    在这里插入图片描述

    Prewitt算子

     I=imread('a2.jpg'); 
    I1=rgb2gray(I); %将彩色图变成灰色图
    subplot(1,2,1);
    imshow(I1),title('原图');
    
    model=[-1,0,1;
           -1,0,1;
           -1,0,1];
    [m,n]=size(I1);
    
    I2=I1;
    for i=2:m-1
        for j=2:n-1
            tem=I1(i-1:i+1,j-1:j+1);
            tem=double(tem).*double(model);
          
            I2(i,j)=sum(sum(tem));
              
             end
    end
    
    figure,
    imshow(uint8(I2)),title('边缘提取后的图像');
    

    效果图
    在这里插入图片描述
    laplacian算子

     I=imread('C:\Users\LiCongliang\Desktop\数字图像处理\数字图像处理第五次作业\tea.png'); 
    I1=mat2gray(I);%实现图像矩阵的归一化操作
    [m,n]=size(I1);
    newGrayPic=I1;%为保留图像的边缘一个像素
    LaplacianNum=0;%经Laplacian算子计算得到的每个像素的值
    LaplacianThreshold=0.2;%设定阈值
    for j=2:m-1 %进行边界提取
        for k=2:n-1
            LaplacianNum=abs(4*I1(j,k)-I1(j-1,k)-I1(j+1,k)-I1(j,k+1)-I1(j,k-1));
            if(LaplacianNum > LaplacianThreshold)
                newGrayPic(j,k)=255;
            else
                newGrayPic(j,k)=0;
            end
        end
    end
    I2=rgb2gray(I); %将彩色图变成灰色图
    imshow(I2),title('原图');
    figure,
    imshow(newGrayPic);
    title('Laplacian算子的处理结果')
    

    效果图
    在这里插入图片描述

    更多

    获取更多资料、代码,微信公众号:海轰Pro
    回复 海轰 即可

    展开全文
  • 为一幅图片添加椒盐噪声,高斯噪声,然后用均值滤波和中值滤波,进行滤波处理这两种噪声,比较两种滤波方式。 实验步骤 详见代码 实验结果 添加噪声 滤波结果 从实验结果看,对于椒盐噪声中值滤波...
  • matlab里的图像处理函数

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

    万次阅读 多人点赞 2015-10-12 19:47:54
    写在前头:说到数字图像处理,不得不提起MATLAB。这是一款非常方便的仿真软件,绝大多数的图像处理可以用MATLAB完成。  有人问,处理图片,用PS岂不是更好。两者各有优点,如果需要将10000幅图片转换成灰度...
  • MATLAB图片处理(上)

    万次阅读 2018-10-26 23:32:14
    MATLAB 图像处理。相关函数大多数都以im开头。 1. 查看图像信息imfinfo 我的理解时 image file infomation 输入 clear format compact % 查看图片信息 % 此处图片名为 ubuntu.png % 文件路径为 D:/picture,可以用 ...
  • 《精通MATLAB图像处理 第2版 》紧密结合实例 以实用为目标来讲述MATLAB的图像处理技术 在简要介绍图像处理的基础理论之后 重点讲述应用MATLAB图像处理工具箱 并给出了大量的实例及综合实战应用 《精通MATLAB图像处理...
  • MATLAB图像处理实例详解》对图像处理的基础概念做了必要交代,重点给出了MATLAB在图像处理各个环节中的实现方法,在讲解各个知识点时列举了丰富的实例,使得《MATLAB图像处理实例详解》应用性很强。书中的实例程序...
  • 本书分为4部分,共29章,详细讲解了MATLAB的结构和功能,以及MATLAB图像处理工具箱。针对制作完整的图像处理软件的需要,本书还讲解了MATLAB界面编程。 本书第1部分“基础篇”,包括第1~第10章,对MATLAB安装试验...
  • MATLAB图像处理实例详解》共15章,分为3篇。第1篇为MATLAB及图像基础,涵盖的内容有图像基础、MATLAB基础和MATLAB数字图像处理基础;第2篇为基于MATLAB的常见图像处理技术,涵盖的内容有数字图像的运算、数字图像...
  • 本书分为4部分,共29章,详细讲解了MATLAB的结构和功能,以及MATLAB图像处理工具箱。针对制作完整的图像处理软件的需要,本书还讲解了MATLAB界面编程。 本书第1部分“基础篇”,包括第1~第10章,对MATLAB安装试验...
  • Matlab 图像处理

    万次阅读 热门讨论 2007-10-20 00:52:00
    MATLAB知识var stattitle=MATLAB知识; yaaan17:40 PM fnChangeFloat(left,oImg)实验一 Matlab语言、数字图象基本操作一、实验目的1、复习MATLAB语言的基本用法;2、掌握MATLAB语言中图象数据与信息
  • MATLAB图像处理实例详解》对图像处理的基础概念做了必要交代,重点给出了MATLAB在图像处理各个环节中的实现方法,在讲解各个知识点时列举了丰富的实例,使得《MATLAB图像处理实例详解》应用性很强。书中的实例程序...
  • Matlab图像处理

    万次阅读 2010-09-05 21:29:00
    Matlab 图像处理   MATLAB知识实验一 Matlab语言、数字图象基本操作一、实验目的 1、复习MATLAB语言的基本用法; 2、掌握MATLAB语言中图象数据与信息的读取方法; 3、掌握在MATLAB中绘制灰度直方图的方法,...
  • MATLAB图像处理实例详解》配套源代码
  • matlab图像处理常用函数大全

    万次阅读 多人点赞 2018-07-16 16:03:34
    显示索引图像和灰度图像>> [X,map]=imread('trees.tif');>> gmap=rgb2gray(map);>> figure,imshow(X,map);>> figure,imshow(X,gmap);利用膨胀函数平移图像...
  • MATLAB图像处理视频

    2017-12-25 11:24:40
    数字图像处理MATLAB手把手教你学习,认真学一定有收获
  • Matlab 图像处理工具箱

    千次阅读 2015-04-08 21:49:29
    计算机视觉/图像处理研究中经常要用到Matlab,虽然其自带了图像处理和计算机视觉的许多功能,但是术业有专攻,在进行深入的视觉算法研究的时候Matlab的自带功能难免会不够用。本文收集了一些比较优秀的Matlab计算机...
  • matlab图像处理gui

    2012-07-27 20:02:12
    图像处理中的多种方法,如直方图、直方图均衡化、多种去噪方法、算子等利用matlab整理成可视化化的操作界面。本程序里所涉及的图像算法均是自己编写的,不是调用matlab自带的函数。本程序在matlab R2010a成功运行...
  • 涵盖了Matlab图像处理工具箱的几乎所以的M函数,他们扩张了Matlab解决图像处理问题的能力。相信这是对有志于数字图像处理的各路英雄是个好帮手!
  • MATLAB图像处理工具箱

    千次阅读 2018-08-11 22:21:26
    自己在学习过程中查阅资料整理了MATLAB图像处理工具箱中函数的名称列表,以及MathWorks中讲解各个函数使用的链接: 1.绘图工具箱 plot 基本绘图函数 mesh 绘制三维网格曲面 fplot 绘制数学函数图 ....
  • Matlab 图像处理与计算机视觉工具箱

    千次阅读 2018-02-09 21:45:49
    目录 1.常用工具箱 ...1.3Peter Kovesi的工具箱:轻量好用,侧重图像处理 1.4 Machine Vision Toolbox:侧重机器视觉、三维视觉 1.5​​Piotr's Image & Video Matlab Toolbox:侧重物体识别 1.6 DI...
  • Matlab图像处理函数汇总

    千次阅读 2015-12-26 10:30:38
    Matlab图像处理函数汇总: 图像的变换, 模拟噪声生成函数和预定义滤波器, 图像的增强, 图像边缘检测, 形态学图像处理, 改变MATLAB背景颜色, 小波变换.
  • 本书共15章,分为3篇。...第三篇为基于Matlab的高级图像处理技术及应用,涵盖的内容有图像压缩编码、图像特征分析、图像形态学处理、小波在图像处理中的应用、基于Simulink的视频和图像处理和Matlab图像处理综合实例。
  • matlab图像处理

    热门讨论 2009-05-27 10:52:56
    matlab图像处理 matlab图像处理 matlab图像处理 matlab图像处理 matlab图像处理
  • MATLAB 图像处理命令1、 MATLAB图像处理的一些简单函数A、 imread imread函数用于读入各种图像文件,其一般的用法为 [X,MAP]=imread(‘filename’,‘fmt’)其中,X,MAP分别为读出的图像数据和颜色表数据,fmt...
  • MATLAB图像处理实例对于图像处理及机器视觉的同学必备,无论开发项目还是做科研都很有参考价值,里面的源码改一下就可以使用。

空空如也

1 2 3 4 5 ... 20
收藏数 50,610
精华内容 20,244
关键字:

matlab图像处理

matlab 订阅