精华内容
下载资源
问答
  • 数字图像处理的k-means算法实现,能够完全把图像分割为k个聚点,进而把图片分为k中不同的颜色,比如:k=2,图像包含两种颜色(黑,白);k=3,图像包含两种颜色(黑白灰),等等。随着k值越大,图像越来越靠近原图...
  • 熟悉matlab图像处理工具箱及图像边缘检测函数的使用;2.理解和掌握图像边缘检测(Sobel、Prewitt、Log边缘算子)的方法和应用;二.实验设备1.PC机一台;2.软件matlab;三.程序设计在matlab环境中,程序首先读取...

    实验4.1 边缘检测(Sobel、Prewitt、Log边缘算子)

    一.实验目的

    1.熟悉matlab图像处理工具箱及图像边缘检测函数的使用;

    2.理解和掌握图像边缘检测(Sobel、Prewitt、Log边缘算子)的方法和应用;

    二.实验设备

    1.PC机一台;

    2.软件matlab;

    三.程序设计

    在matlab环境中,程序首先读取图像,然后调用图像边缘检测(Sobel、Prewitt、Log边缘算子)函数,设置相关参数,再输出处理后的图像。

    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

    双击桌面matlab图标启动matlab环境;

    2. 在matlab命令窗口中输入相应程序。书写程序时,首先读取图像,一般调用matlab自带的图像,如:cameraman图像;再调用相应的边缘检测(Sobel边缘算子、Prewitt边缘算子、Log边缘算子)函数,设置参数;最后输出处理后的图像;

    3.浏览源程序并理解含义;

    4.运行,观察显示结果;

    5.结束运行,退出;

    五.实验结果

    观察经过图像边缘检测(Sobel、Prewitt、Log边缘算子)处理后的结果。


    v2-a6216881ea39f029fffbcfc0d846bb0b_b.jpg

    v2-9ce6195c4840463015136e8fc305f76d_b.jpg


    (a)原始图像 (b)Sobel边缘算子


    v2-4cf5df5afd632a5c1c22571a3152307d_b.jpg

    v2-8e7f2faa53aec35bead89985169b7a6e_b.jpg


    (c)Prewitt边缘算子 (d)Log边缘算子

    图(7)

    六.实验报告要求

    输入一幅灰度图像,给出其图像边缘检测(Sobel、Prewitt、Log边缘算子)后的结果并进行分析对比。






























    实验五 基于DSP的边缘检测

    实验5.1 边缘检测(Sobel边缘算子)

    一.实验目的

    1.熟悉视频显示程序的运行过程、控制过程,搞清数据处理、传输途径;

    2.结合实例学习如何在视频显示程序中增加图像处理算法;

    3. 熟悉CCS集成开发环境的使用;

    4.了解边缘检测的算法和用途,学习利用Sobel算子进行边缘检测的程序设计方法;

    二.实验设备

    1.SEED_DTK 教学实验系统一套;

    2.DSP 仿真器;

    3.PC机一台。

    三.程序设计

    在视频显示任务的循环中,程序首先将视频数据从输入缓冲区读入自己开设的临时图像处理缓冲区,再在临时图像处理缓冲区上进行处理,处理后的数据再输出到输出缓冲区。

    在屏幕中央开辟一个矩形区域,对这个区域内的图像进行处理。这里按模板(1)进行处理。

    DSP程序具体详见附录一。

    /*画矩形边框*/

    void drawRectangle();

    /*Sobel边缘检测处理*/

    void sobelEdge();

    四.实验步骤

    1.实验准备

    (1) 连接设备

    参见“第一部分 实验环境的建立”的“一 硬件连接”部分。

    (2) 开启设备

    ①打开计算机电源(注意:连接设备时并不需要关闭计算机,但要关闭实验箱电源;如在连接设备前已经打开计算机,就不需要进行此步骤了)。

    ②打开实验箱电源开关

    ③打开显示器开关。

    (3) 设置Code Composer Studio 为Emulator 方式

    参见“第一部分 实验环境的建立”的“二 软件的安装和配置”部分。如先前已经设置过,就不需再进行设置了。

    (4) 双击usb20emurst.exe,如果出现提示“SEED USB2.0 XDS510 CARD IS RESET,HARDWARE VERSION 1”,证明仿真器与目标系统连接正常。否则请检查电源是否打开,仿真器驱动是否安装正确以及硬件。

    (5) 启动Code Composer Studio

    双击桌面上“CCS 2(‘C6000)”图标,启动Code Composer Studio。成功后可看到CCS环境界面。

    2.打开工程:工程目录

    DM642Programs\2.ImageProcess\SEED401_SobelEdge\SobelEdgeloop2.pjt

    3.浏览工程中源程序并理解含义。

    4.编译、连接、下载程序并运行,观察显示。

    5.结束运行,退出工程。

    五.实验结果

    矩形框内外分别是用Sobel边缘算子处理和未处理的图像结果。

    六.实验报告要求

    (1)简述DSP下实验步骤;

    (2)输入视频,观察Sobel边缘检测效果并经行分析;






































    实验5.2 边缘检测(Prewitt边缘算子)

    一.实验目的

    1.熟悉视频显示程序的运行过程、控制过程,搞清数据处理、传输途径;

    2.结合实例学习如何在视频显示程序中增加图像处理算法;

    3. 熟悉CCS集成开发环境的使用;

    4.了解边缘检测的算法和用途,学习利用Prewitt算子进行边缘检测的程序设计方法;

    二.实验设备

    1.SEED_DTK 教学实验系统一套;

    2.DSP 仿真器;

    3.PC机一台。

    三.程序设计

    在视频显示任务的循环中,程序首先将视频数据从输入缓冲区读入自己开设的临时图像处理缓冲区,再在临时图像处理缓冲区上进行处理,处理后的数据再输出到输出缓冲区。

    在屏幕中央开辟一个矩形区域,对这个区域内的图像进行处理。这里按模板(2)进行处理。

    DSP程序具体详见附录。

    /*画矩形边框*/

    void drawRectangle();

    /*Prewitt边缘检测处理*/

    void PrewittEdge();

    四.实验步骤

    1.实验准备

    (1) 连接设备

    参见“第一部分 实验环境的建立”的“一 硬件连接”部分。

    (2) 开启设备

    ①打开计算机电源(注意:连接设备时并不需要关闭计算机,但要关闭实验箱电源;如在连接设备前已经打开计算机,就不需要进行此步骤了)。

    ②打开实验箱电源开关

    ③打开显示器开关。

    (3) 设置Code Composer Studio 为Emulator 方式

    参见“第一部分 实验环境的建立”的“二 软件的安装和配置”部分。如先前已经设置过,就不需再进行设置了。

    (4) 双击usb20emurst.exe,如果出现提示“SEED USB2.0 XDS510 CARD IS RESET,HARDWARE VERSION 1”,证明仿真器与目标系统连接正常。否则请检查电源是否打开,仿真器驱动是否安装正确以及硬件。

    (5) 启动Code Composer Studio

    双击桌面上“CCS 2(‘C6000)”图标,启动Code Composer Studio。成功后可看到CCS环境界面。

    2.打开工程:工程目录

    DM642Programs\2.ImageProcess\ SEED402_PrewittEdge\PrewittEdgeloop2.pjt

    3.浏览工程中源程序并理解含义。

    4.编译、连接、下载程序并运行,观察显示。

    5.结束运行,退出工程。

    五.实验结果

    矩形框内外分别是用Prewitt边缘算子处理和未处理的图像结果。

    六.实验报告要求

    (1)简述DSP环境下实验步骤;

    (2)输入视频,观察Prewitt边缘检测效果并进行分析。







































    实验5.3 边缘检测(Laplacian边缘算子)

    一.实验目的

    1.熟悉视频显示程序的运行过程、控制过程,搞清数据处理、传输途径;

    2.结合实例学习如何在视频显示程序中增加图像处理算法;

    3. 熟悉CCS集成开发环境的使用;

    4.了解边缘检测的算法和用途,学习利用Laplacian算子进行边缘检测的程序设计方法;

    二.实验设备

    1.SEED_DTK 教学实验系统一套;

    2.DSP 仿真器;

    3.PC机一台。

    三.程序设计

    在视频显示任务的循环中,程序首先将视频数据从输入缓冲区读入自己开设的临时图像处理缓冲区,再在临时图像处理缓冲区上进行处理,处理后的数据再输出到输出缓冲区。

    在屏幕中央开辟一个矩形区域,对这个区域内的图像进行处理。这里按模板(3)进行处理。

    DSP程序具体详见附录三。

    /*画矩形边框*/

    void drawRectangle();

    /*Laplacian边缘检测处理*/

    void LaplacianEdge ();

    四.实验步骤

    1.实验准备

    (1) 连接设备

    参见“第一部分 实验环境的建立”的“一 硬件连接”部分。

    (2) 开启设备

    ①打开计算机电源(注意:连接设备时并不需要关闭计算机,但要关闭实验箱电源;如在连接设备前已经打开计算机,就不需要进行此步骤了)。

    ②打开实验箱电源开关

    ③打开显示器开关。

    (3) 设置Code Composer Studio 为Emulator 方式

    参见“第一部分 实验环境的建立”的“二 软件的安装和配置”部分。如先前已经设置过,就不需再进行设置了。

    (4) 双击usb20emurst.exe,如果出现提示“SEED USB2.0 XDS510 CARD IS RESET,HARDWARE VERSION 1”,证明仿真器与目标系统连接正常。否则请检查电源是否打开,仿真器驱动是否安装正确以及硬件。

    (5) 启动Code Composer Studio

    双击桌面上“CCS 2(‘C6000)”图标,启动Code Composer Studio。成功后可看到CCS环境界面。

    2.打开工程:工程目录

    DM642Programs\2.ImageProcess\SEED403_ LaplacianEdge\LaplacianEdgeloop2.pjt

    3.浏览工程中源程序并理解含义。

    4.编译、连接、下载程序并运行,观察显示。

    5.结束运行,退出工程。

    五.实验结果

    矩形框内外分别是用Laplacian边缘算子处理和未处理的图像结果。

    六.实验报告要求

    (1)简述DSP环境下实验步骤;

    (2)输入视频,观察Laplacian边缘检测效果并进行分析。

    展开全文
  • 最近学习冈萨雷斯的数字图像处理(MATLAB),随手写个学习笔记,以备以后复习~ 1、读取图像 imread('filename'); %filename是一个含有图像文件全名的字符串(包含任何可用扩展名)  插一句:filename也可以是一个...

    最近学习冈萨雷斯的数字图像处理(MATLAB),随手写个学习笔记,以备以后复习~

    1、读取图像

    imread('filename'); %filename是一个含有图像文件全名的字符串(包含任何可用扩展名)

      插一句:filename也可以是一个包含相对路径或者是绝对路径的字符串,比如:

    >> f=imread('.\myimages\pic.jpg');

      表示从当前的工作目录中名为myimages的子目录中读取图像文件pic.jpg。

      函数size可给出一幅图像的行数和列数:

      

      使用[M,N] = size(f); 该语法将返回图像的行数M和列数N,该函数很有用。

    2、显示图像

    在MATLAB桌面上一把使用函数imshow来显示,该函数的基本语法为:

                       imshow(f , G)

    f是一个图像数组,也可以是一个字符串;G是显示该图像的灰度级数,如省略,则默认的灰度级数是256。

                imshow(f , [low high])

    会将所有小于或者等于low的值都显示为黑色,所有大于或者等于high的值都显示为白色。
                 inshow(f , [  ]);

    可以将变量low设置为数组f的最小值,将变量high设置为数组f的最大值。这一形式在显示一幅动态范围较小的图像或者是基友正值又有负值的图像时非常有用。

    Ps:函数imshow命令行结尾处的分号对结果无影响。(一般情况下命令行中分号的作用是取消一个命令行的输出)

    figure函数

    figure函数用于保持第一幅图像并同时显示第二幅图像。比如:

    注意:没想多显示一幅图像,就要在显示语句之前加一个figure。

    3、保存图像

    3.1 imwrite函数

    语法: imwrite(f , 'filename');

    f是一个图像数组,filename中包含的字符串必须是一个可以识别的文件格式的扩展名。

    若filename中不包含路径信息,则imwrite会将文件保存到当前的工作目录中。

    3.2 imfinfo函数

    使用imfinfo函数可以将图像的详细信息存入结构变量中,以便于后续的计算。例如:

    存入图像信息的K是一个结构体变量,可以用点号运算符访问其结构体成员。

    在命令行直接键入:imfinfo filename  结果是在屏幕上显示出信息。

     

     

    展开全文
  • 使用Matlab进行数字图像处理

    千次阅读 2020-05-17 15:17:10
    1.书写规范: 对大小写敏感,标点符号是半角 一行多个命令之间用",“分开,不想显示结果用”;” 续行符号"…” 不同语法关键字使用不同的颜色表示 命令行编辑可进行Cut、Copy、Paste等操作。 变量命名规则:字母...

    小复习

    1.书写规范:

    1. 对大小写敏感,标点符号是半角
    2. 一行多个命令之间用",“分开,不想显示结果用”;”
    3. 续行符号"…”
    4. 不同语法关键字使用不同的颜色表示
    5. 命令行编辑可进行Cut、Copy、Paste等操作。
    6. 变量命名规则:字母开头,后面是数字字母下划线。
    7. 注释符号://或%。

    页面布局:
    在这里插入图片描述
    ⑴命令窗口 :输入MATLAB命令、函数、矩阵、表 达式等,并显示除图形以外的所有计算结果。
    在这里插入图片描述
    (2)工作空间
    显示工作空间中所有变量的名称、
    大 小、字节数及数据类型。
    可在工作空间对变量进行观察、编
    辑、 保存(保存为mat文件)和删除。
    使用dear命令可以清除工作空间内
    的变量。
    MATLAB退出后,工作空间自动清除。
    在这里插入图片描述
    (3)当前目录浏览器
    当前目录是MATLAB运行文件的
    工作目录。
    在当前目录或在搜索路径下的文
    件及函数才可以被运行或调用。
    工作中文件和数据默认在当前目
    录下。
    如需调用多个目录下的文件,将
    这些目录加入搜索路径。
    在这里插入图片描述

    数字图像处理

    相关操作:
    (1) 几何运算,包括缩放、旋转和裁剪;
    (2) 分析操作,包括边缘检测,四叉树分解;
    (3) 增强操作,包括亮度调整,直方图均衡化,去噪声;
    (4) 2-D FIR滤波器设计;
    (5) 图像变换,包括离散余弦变换(DCT)和Radon变换;
    (6) 邻域与块处理;
    (7) 感兴趣区域处理;
    (8) 二值图像处理,包括形态学操作;
    (9) 彩色空间变换;
    (10) 彩色地图管理。
    相关函数:
    数字图像读入----imread函数
    功能:读入图像数据
    格式:I=imread(‘FILENAME’)
    FILENAME指定图像文件的完整路径和文件名,如果
    在搜索目录下,只需提供文件名。
    例:假设moon.jpg、cat.jpg 存放在当前工作目录下
    cat1.bmp存放在E盘图像目录下。
    I1=imread(‘moon.jpg’);
    I2=imread(‘cat.jpg’);
    I3=imread(‘E:\图像\cat1.jpg’);
    数字图像信息查询----imfinfo函数
    功能:用于获取图像文件的有关信息
    格式:inf=imfinfo(‘FILENAME’)
    FILENAME指定图像文件的完整路径和文件名,如果
    在搜索目录下,只需提供文件名。
    数字图像显示----imshow函数
    功能:显示图像
    格式:imshow(I)
    imshow(I,[low high])
    I为要显示图像的数据矩阵
    [low high] 指定显示灰度范围,<low设为黑色,
    >=high设为白色
    subplot(1,2,1),imshow (I1);
    subplot(1,2,2),imshow (I1,[30 150]);
    数字图像存储----imwrite函数
    功能:将图像数据写入到图像文件中
    格式:imwrite(I,filename)
    I为要写入图像矩阵。
    filename为待写入的文件
    例:将数据保存为图像文件
    请观察graytest.bmp是否与matlab中显示的数据一致。
    J=I(150:300,150:300);
    imshow(J)
    imwrite(J,’graytest.bmp’)

    图像类型

    灰度图像
    常用0表示黑色,255表示白色,用0到255之间的数表示灰度。
    在这里插入图片描述
    例:生成一个灰度图像,并显示。

        A=[0 230;255 60;30 100]
        A=uint8(A);
        imshow(A)
        imshow(A,’initialMagnification’,’fit’)
    

    彩色图像
    在这里插入图片描述
    每个像素由R、G、B分量构成的图像,其中R、G、B、是由不同的灰度级来描述的。

                                         I=imread();
                                         subplot(2,2,1)
                                         imshow(I)
                                         r=I(:,:,1);
                                         subplot(2,2,2)
                                         imshow(r)
                                         g=I(:,:,2);
                                         subplot(2,2,3)
                                         imshow(g)
                                         b=I(:,:,3);
                                         subplot(2,2,4)
                                         imshow(b)
    
        例:生成一个彩色图像,并显示。
        clear
           clc
           close all
           R=[255 30 230;255 0 100;0 200 0];
           G=[0 80 220;255 255 50;0 35 0];
           B=[0 200 15;255 0 190;0 70 255];
           RGB(:,:,1)=R
           RGB(:,:,2)=G
           RGB(:,:,3)=B   
           RGB=unit8(RGB) ;
           imshow(RGB,’initialMagnification’,’fit’)
    

    二值图像
    在这里插入图片描述
    每个像素只有两种灰度取值
    例:读取二值图像(黑白图像),查看该图像的数据矩阵,对二值图像进行取反操作,查看“黑白颠倒”的效果。

               I=imread(   );
                                          subplot(1,2,1)
                                          imshow(I)
                                          J=imcomplement(I);
                                          subplot(1,2,2)
                                          imshow(J)
    

    类型间的转换:
    im2bw 将图像转换为二值图像
    rgb2gray 将彩色图像转换为灰度图像

    im2bw 功能:将图像按照阈值转换为二值图像
    格式: bw=im2bw(I,level)
    I为要转换的图像矩阵,bw为转换后的二值图像
    level为阈值,取值范围[0,1],默认为0.5
    如果I中像素灰度值大于I*level,则该值变为1,否则为0。
    二值图像分析在对象识别与模式匹配中有重要作用,同时也在机器人视觉中也是图像处理的关知键步骤,目的是将目标用户背景分类 .

    rgb2gray 功能:将彩色图像转换为灰度图像
    格式: I=rgb2gray(rgb)
    rgb为要待转换的彩色图像,I为转换后的灰度图像矩阵

    例:     RGB=imread(‘     ’);
               gray=rgb2gray(RGB);  %得到灰度图
               BW1=im2bw(gray,0.3); %将灰度图转成二值图,阈值0.3
               BW2=im2bw(gray,0.5); %将灰度图转成二值图,阈值0.5
               subplot(2,2,1),imshow(RGB); %显示原图片
               subplot(2,2,2),imshow(gray); %显示转换后的灰度图片
               subplot(2,2,3),imshow(BW1); %显示转换后的二值图片
               subplot(2,2,4),imshow(BW2); %显示转换后的二值图片
    
    

    图像的几何变换与灰度调整

    1、对图像进行几何变换,包括尺寸变换和旋转变换。
    2、对图像进行灰度调整,包括线性变换、非线性变换和直方
    图均衡化。
    图像尺寸变换---- imresize函数
    功能:缩放图像
    格式:B=imresize(A,m)
    B=imresize(A,[nrow ncol],method)
    返回图像B是原图像A的m倍
    nrow和ncol为目标图像的高度和宽度
    method改变图像时所采用的插值算法: ‘nearest’:最近邻插值算法;
    ‘bilinear’:双线性差值算法; ‘bicubic’:双三次插值算法

    I=imread(‘moon.jpg’)
    imshow(I)
    figure
    J=imresize(I,0.25);
    imshow(J)
    
    I=imread(‘moon.jpg’);
    subplot(1,2,1),imshow(I)
    J=imresize(I,0.25);
    subplot(1,2,2),imshow(J)
    

    图像旋转变换---- imrotate函数
    功能:将图像旋转为若干角度
    格式:bw= imrotate(I,angle)
    bw=imrotate (I,angle,method)
    bw = imrotate(A,angle,method,bbox)
    I为要旋转的图像矩阵
    angle为旋转角度
    method为插值算法,'nearest ‘ 'bilinear ’ 'bicubic‘
    bbox参数用于指定输出图像属性: ‘crop’ 或 ‘loose’
    ‘crop’: 通过对旋转后的图像B进行裁剪, 保持旋转后输出图像bw
    的尺寸和输入图像A的尺寸一样。
    ‘loose’:使输出图像足够大, 以保证原旋转后超出图像尺寸范围
    的像素值没有丢失。 一般这种格式产生的图像的尺寸都
    要大于原 图像的尺寸。

    I=imread(‘        ’);
    for i=1:10
         J=imrotate(I,36*i, ‘crop’); 
         subplot(2,5,i)
         imshow(J)
    end
    

    imadjust函数
    功能:灰度图像的灰度转换
    格式:J=imadjust(I)
    g=imadjust( I,[low_in high_in],[low_out high_out])
    g=imadjust( I,[low_in high_in],[low_out high_out], gamma)
    输入灰度low_in~ high_in;输出灰度low_out~high_out
    输入灰度小于low_in,则输出灰度为low_out
    输入灰度大于high_in,则输出灰度为high_out
    将low_in至 high_in间值映射到low_out至high_out间值。

    I=imread(‘ moon.jpg’);
    subplot(1,3,1),imshow(I)
    g1=imadjust(I,[0 1],[1 0]); subplot(1,3,2),imshow(g1)
    g2=imadjust(I,[0.5 0.75],[0 1]); subplot(1,3,3),imshow(g2)
    

    imhist函数
    功能:用于获取图像数据的灰度直方图
    格式:imhist(I)
    imhist(I,n)
    I为灰度图像
    n为指定的灰度级

    I=imread(‘cat.jpg’);
    I=rgb2gray(I);
    subplot(1,3,1),imshow(I)
    title(‘原图’)
    subplot(1,3,2),imhist(I)
    title(256灰度直方图’)
    subplot(1,3,3),imhist(I,32)
    title(32灰度直方图’)
    
    

    histeq函数
    功能:通过直方图均衡化来增加灰度图像的直方图
    格式:J=histeq(I)

    I=imread(‘        ’);
    I=rgb2gray(I);
    subplot(2,2,1),imshow(I);title(‘原图’)subplot(2,2,2),imhist(I);title(‘原图直方图’);
    J=histeq(I); 
    subplot(2,2,3),imshow(J); title(‘均衡化图’)subplot(2,2,4),imhist(J); title(‘均衡化后直方图’)

    图像类型与数据类型间的转换

    im2uint8:将输入中所有<0转换为0,所有>1转换为255.其他
    的乘以255。
    im2uint16 :将所有输入 <0转换为0,所有>1转换为655356。
    im2double :将输入转换为double类。
    若输入是unit8、unit16或 logical则转换为[0,1]间的类。
    若输入是double,则返回与输入相等的矩阵

    I=imread(‘moon.jpg’);
    I16=im2uint16(I);
    Id=im2double(I);
    

    实验4 图像滤波

    实验内容:
    1、对图像做平滑滤波,包括均值滤波和加权平均滤波。
    2、对图像做边缘滤波,包括水平边缘和竖直边缘。
    3、对图像做锐化滤波。
    4、对图像傅里叶变换。

    MATLAB实现平均滤波的函数
    fspecial是用来生成滤波器(也叫算子)的函数,其语法格式为
    h=fspecial(type)
    h=fspecial(type,hsize)
    使用type参数来指定滤波器的种类,type=‘average’为生成均值滤波器。 hsize指定滤波器的尺寸,默认值为[3 3]。滤波器也可以自己设计。 h为生成的滤波器。
    基于卷积的图像滤波函数imfilter, imfilter的语法格式为:
    Y= imfilter(X, h)
    其中Y=imfilter(h,X) 返回图像X经滤波算子h滤波后的结果,默认返回图像Y与输入图像X大小相同。

    I=imread(‘’);
    I1=double(rgb2gray(I))
    figure,imshow(I1,[]),title(‘original imgae’)
    H=[[1/91/91/9],[1/91/91/9],[1/91/91/9]]
    %H=fspecial('average');
    I2=imfilter(I1,H);
    figure,imshow(I2,[]),title(‘ average image ’)
    H=[[1/162/161/16],[2/164/162/16],[1/162/161/16]]
    %I1=imnoise(I,'salt & pepper',0.05);
    I3=imfilter(I1,H);
    figure,imshow(I3,[]),title(‘weighted average image ’)
    
    

    MATLAB实现中值滤波的函数
    medfilt2
    功能:对图像进行中值滤波
    格式: J = medfilt2(I)
    J = medfilt2(I,[m n])
    I为原图像, [m n] 指定滤波器的尺寸,默认值为[3 3]。滤波器也可以自己设计。

    I4=medfilt2(I1,[3 3]);
    I5=medfilt2(I1,[7 7]);
    figure
    subplot(2,2,1),imshow(I1),colormap(‘gray’),title(‘Original’)
    subplot(2,2,2),imshow(I2),colormap(‘gray’),title(‘average image ’) subplot(2,2,3),imshow(I4),colormap(‘gray’),title(‘medium filter 3*3) subplot(2,2,4),imshow(I5),colormap(‘gray’),title (‘medium filter 7*7) 
    

    MATLAB实现边缘检测的函数
    edge
    功能:对图像进行边缘检测
    格式: J = edge(I)
    J = edge (I,method)
    I为原图像。 method:提取边界的方法,共有六种可用方法,‘sobel’、‘prewitt’、‘roberts’、‘log’、‘zerocross’‘canny’。缺省时使用‘sobel’。

    MATLAB实现图像锐化的函数

    傅里叶变换

     clear;
                                              clc;
                                              clear;
                                               im=imread(‘            ’)
                                               im1=rgb2gray(im)
                                               im2=imresize(im1,[512,512]);
                                               figure,imshow(im2);
                                               title(‘original image’)
                                                f=double(im2);
                                                F=fft2(f);
                                                S=abs(F);
                                                figure,imshow(S,[]);
                                                 title(‘Frequency  Spectrum’);
                          Fc=fftshift(F);
                          S=abs(Fc);
                          figure,imshow(S,[]);
                          title(‘Centered Frequency Spectrum’)
    
    

    遇到的问题是,频谱图全黑!

    展开全文
  • 看了下CSDN上有同类的资源,但是好黑,下载要12积分,我在网上找了好久才发现一个完整的扫描版,就当个搬运工吧。书写的很好,建议买纸质版的阅读
  • 基于MATLAB数字图像处理系统设计摘 要MATLAB 作为国内外流行的数字计算软件,具有强大的图像处理功能,界面简洁,操作直观,容易上手,而且是图像处理系统的理想开发工具。笔者阐述了一种基于MATLAB数字图像处理...

    基于MATLAB的数字图像处理系统设计

    摘 要

    MATLAB 作为国内外流行的数字计算软件,具有强大的图像处理功能,界面简洁,操作直观,容易上手,而且是图像处理系统的理想开发工具。

    笔者阐述了一种基于MATLAB的数字图像处理系统设计,其中包括图像处理领域的大部分算法,运用 MATLAB 的图像处理工具箱对算法进行了实现,论述了利用系统进行图像显示、图形表换及图像处理过程,系统支持索引图像、灰度图像、二值图像、RGB 图像等图像类型;支持BMP、GIF、JPEG、TIFF、PNG 等图像文件格式的读,写和显示。

    上述功能均是在MATLAB 语言的基础上,编写代码实现的。这些功能在日常生活中有很强的应用价值,对于运算量大、过程复杂、速度慢的功能,利用 MATLAB 可以既能快速得到数据结果,又能得到比较直观的图示。

    关键词:MATLAB 数字图像处理 图像处理工具箱 图像变换

    第一章 绪 论

    1.1 研究目的及意义

    图像信息是人类获得外界信息的主要来源,近代科学研究、军事技术、工农业生产、医学、气象及天文学等领域中,人们越来越多地利用图像信息来认识和判断事物,解决实际问题,由此可见图像信息的重要性,数字图像处理技术将会伴随着未来信息领域技术的发展,更加深入到生产和科研活动中,成为人类生产和生活中必不可少的内容。

    MATLAB 软件不断吸收各学科领域权威人士所编写的实用程序,经过多年的逐步发展与不断完善,是近几年来在国内外广泛流行的一种可视化科学计算软件。MATLAB 语言是一种面向科学与工程计算的高级语言,允许用数学形式的语言来编写程序,比 Basic、Fortan、C 等高级语言更加接近我们书写计算公式的思维方式,用 MATLAB 编写程序犹如在演算纸上排列出公式与求解问题一样。它编写简单、编程效率高并且通俗易懂。

    1.2 国内外研究现状

    1.2.1 国内研究现状

    国内在此领域的研究中具有代表性的是清华大学研制的数字图像处理实验开发系统 TDB-IDK 和南京东大互联技术有限公司研制的数字图像采集传输与处理实验软件。

    TDB-IDK 系列产品是一款基于 TMS320C6000 DSP 数字信号处理器的高级视频和图像系统,也是一套 DSP 的完整的视频、图像解决方案,该系统适合院校、研究所和企业进行视频、图像方面的实验与开发。该软件能够完成图像采集输入程序、图像输出程序、图像基本算法程序。可实现对图像信号的实时分析,图像数据相对 DSP独立方便开发人员对图像进行处理,该产品融合 DSP 和 FPGA/CPLD 两个高端技术,可以根据用户的具体需求合理改动,可以分析黑白和彩色信号,可以完成图形显示功能。

    南京东大互联技术有限公司研制的数字图像采集传输与处理实验软件可实现数字图像的采集、传输与处理。可利用软件及图像采集与传输设备,采集图像并实现点对点的数字图像传输,可以观察理解多种图像处理技术的效果和差别,其中包括图像的灰度直方图及其变换、锐化、平滑、滤波、伪彩、轮廓提取与增强、图像格式转换及其文件结构。

    1.2.2 国外研究现状

    目前大量的图像处理软件如PHOTOSHOP,PAINTSHOP等都是基于广告策划和图像修饰处理而设计的应用软件,针对图像处理技术基本知识的理解与掌握以及相关处理方法研究的软件甚少,不适合学习研究使用。随着计算机辅助设计的日益提高和成熟,用于学习与研究的软件也越来越多。如美国Southern Illinois University开发的CVIPtools计算机视觉与图像处理实验软件就是专门针对图像处理技术的实验软件,为初学者提供了一个消化理论知识的实验环境。

    CVIPtools计算机视觉与图像处理实验软件,主要用于计算机数字图像分析和处理,主要宗旨是让图像处理的初学者、学生、老师和其它研究人员探索计算机数字图像处理的巨大力量。最新Windows版本的CVIPtools提供使用者四种层次应用方式:算法代码层,公共对象模块(组件)界面层, cvipimage层和图形用户界面(GUI)。最下面的阶层算法代码层主要是基于以前的版本CVIPtools ,包括所有的图像、数据处理程序和功能,是用标准C语言写的。最上的阶层为CVIPtools GUI,可以让生手实验一些图像处理的工具,而不需具备程序设计的能力。目前国外很多大学、研究院在数字图像处理的实验研究中都应用此软件。

    1.3 数字图像处理研究的内容

    一般的数字图像处理的主要目的集中在图像的存储和传输,提高图像的质量,改善图像的视觉效果,图像理解以及模式识别等方面。新世纪以来,信息技术取得了长足的发展和进步,小波理论、神经元理论、数字形态学以及模糊理论都与数字处理技术相结合,产生了新的图像处理方法和理论。数字图像处理技术主要包括:

    1、图像增强

    目前图像增强技术根据其处理的空间不同,可分为空域法和频域法两大类,前者根据在图像所在的像素空间进行处理,后者是通过对图像进行傅里叶变换后在频域上间接进行的。

    2、图像恢复

    图像恢复,也称为图像还原,其目的是尽可能地减少或者去除数字图像在获取过程中的降质,恢复被退化图像的本来面貌,从而改善图像质量,以提高视觉观察效果。

    3、图像变换

    图像变换就是把图像从空域转换到频域,对原图像函数寻找一个合适变换的数学问题,众多图像变换方法不断出现,从傅里叶变换发展到余弦变换,再到现在非常流行的小波变换,图像变换分为可分离变换和统计变换两大类。

    4、图像压缩

    数字图像需要很大的存储空间,因此无论传输或存储都需要对图像数据进行有效的压缩。其目的是生成占用较少空间而获得与原图十分接近的图像

    5、图像分割

    图像分割的目的是把一个图像分解成它的构成成分,图像分割是一个十分困难的过程。图像分割的方法主要有 2 类:一种是假设图像各成分的强度值是均匀的,并利用这个特性,这种方法的技术有直方图分割,另外一种方法是寻找图像成分之间的边界,利用的是图像的不均匀性,基于这种方法的的技术有梯度法分割。

    6、边缘检测

    边缘检测技术用于检测图像中的线状局部结构。大多数的检测技术应用某种形式的梯度算子。边缘检测广泛应用于图像分割、图像分类、图像配准和模式识别,在大多数的实际应用中,边缘检测是当做一个局部滤波运算完成的。

    第二章 数字图像处理技术软件MATLAB 简介

    2.1 MATLAB 软件简介

    MATLAB 是 Math works 公司于推出的一套高性能的数值计算和可视化软件,其全称是 Matrix Laboratory,亦即矩阵实验室,经过多年的逐步发展与不断完善,现已成为国际公认的最优秀的科学计算与数学应用软件之一,是近几年来在国内外广泛流行的一种可视化科学计算软件。它集数值分析、矩阵运算、信号处理和图形显示于一体,构成了一个方便的、界面友好的用户环境,而且还具有可扩展性特征,具有信号处理、控制系统、神经网络、图像处理、小波分析等 30 多个具有专门功能的工具箱,工具箱内的函数源程序也是开放性的,多为 M 文件,用户可以查看这些文件的代码并进行更改,MATLAB 支持用户对其函数进行二次开发,用户的应用程序也可以作为新的函数添加到相应的工具箱中。MATLAB 中的数字图像是以矩阵形式表示的,这意味着 MATLAB 强大的矩阵运算能力用于图像处理非常有利。矩阵运算的语法对 MATLAB中的数字图像同样适用。

    2.2.MATLAB 的主要优缺点

    2.2.1 MATLAB 的主要优点

    1、界面友好,编程效率高

    MATLAB 是一种以矩阵为基本变量单元的可视化程序设计语言,它的语法结构简单,数据类型单一,命令表达方式接近于常用的数学公式。不仅能免去大量的经常反复的基本数学运算,而且它的编译和执行速度都远远超过了采用 C 和 Fortran 语言设计的程序。

    2、功能强大,可扩展性强

    MATLAB 语言不但提供了科学计算、数据分析与可视化、系统仿真等强大的功能,而且具有可扩展性特征,具有自动控制、信号处理、图像处理、模糊逻辑、神经网络、小波分析等 30 多个具有专门功能的 MATLAB 工具箱。工具箱中的函数可以互相调用,也可以由用户自己更改

    3、易学易用性、高效性

    MATLAB 不需要用户有高深的数学知识和程序设计能力,不需要用户深刻了解算法及编程技巧。MATLAB 语句功能十分强大,一条语句可完成十分复杂的任务,大大加快了工程技术人员从事软件开发的效率。

    2. 2.2 MATLAB 的缺点

    1、MATLAB 是一种解释性语言,对于实时性要求较高的领域,如自动控制、信号处理等,其实时效率是较差的。

    2、MATLAB 程序不能脱离其环境运行,因此它不能被用于开发商用软件。

    3、程序可以被直接看到程序的源代码,因而不利于算法和数据的保密。

    2.3MATLAB 图像处理工具箱简介

    MATLAB 的图像处理工具箱功能十分强大,支持的图像文件格式丰富,如*.BMP、*.JPEG、*.GIF、*.TIFF、*.PCX、*.HDF、*.XWD、*.PNG 等。MATLAB 图像处理工具箱支持四种图像类型,分别为真彩色图像、索引色图像、灰度图像、二值图像,由于有的函数对图像类型有限制,这四种类型可以用工具箱的类型转换函数相互转换。

    MATLAB 提供了 15 类图像处理函数,涵盖了包括近期研究成果在内的几乎所有的图像处理方法。这些函数按其功能可分为:图像显示;图像文件 I/O;几何操作;像素和统计处理;图像分析;图像增强;线性滤波;线性二元滤波设计;图像变换;邻域和块处理;二进制图像操作;区域处理;颜色映像处理;颜色空间变换;图像类型和类型转换。

    利用这些图像处理工具箱,并结合其强大的数据处理能力,我们可把精力集中在算法研究上,大大提高了工作效率。而且,在测试这些算法时既可方便地得到统计数据,同时又可得到直观图示。

    2.4MATLAB 支持的图像类型及其转换分析

    1、索引图像

    索引图像包括一个数据矩阵 A,一个颜色映射矩阵 B。其中 B 是一个包含 3 列和若干行的数据阵列。B 矩阵的每一行分别表示红色、绿色和蓝色的颜色值。在 MATLAB 中,索引图像是从像素值到颜色映射表值的直接映射。像素颜色由数据矩阵 A 作为索引指向矩阵 B 进行索引。

    2、灰度图像

    MATLAB 中,一幅灰度图像是一个数据矩阵 I,其中 I 的数据均代表了在一定范围内的颜色灰度值。MATLAB 把灰度图像存储为一个数据矩阵,该数据矩阵中的元素分别代表了图像中的像素。矩阵中的元素可以是双精度的浮点数类型、8 位或 16 位无符号的整数类型。大多数情况下,灰度图像很少和颜色映射表一起保存。但是在显示灰度图像时,MATLAB 仍然在后台使用系统预定义的默认的灰度颜色映射表。

    3、二值图像

    与灰度图像相同,二值图像只需要一个数据矩阵,每个像素只取两个灰度值。二值图像可以采用 uint8 和 double 类型存储,工具箱中以二值图像作为返回结果的函数都使用 uint8 类型。

    4、RGB 图像

    RGB 图像,即真彩色图像,在 MATLAB 中存储为 n×m×3 的数据矩阵。数组中的元素定义了图像中每一个像素的红、绿、蓝颜色值。需要指出的是,RGB图像不使用Windows颜色映射表。像素的颜色保存在像素位置上的红、绿、蓝的强度值的组合来确定。图像文件格式把 RGB 图像存储为 24 位的图像,红、绿、蓝分别占 8 位。这样可以有约 1000万种颜色

    5、图像序列

    MATLAB 的图像处理工具箱中还支持将多帧图像连接成图像序列。图像序列是一个四维的数组,图像帧的序号在图像的长、宽、颜色深度之后构成第四维。在 MATLAB 中,各种图像类型之间的转换关系如图 2.1 所示:


    v2-0031bbd1faf668cfabe85bc9499cd798_b.jpg


    图2.1 图像类型间的转换

    第三章:图像处理系统的详细设计

    用 MATLAB 对图像进行处理是当前科技领域的一个重要的课题,它采用的是用一组有序的灰度或彩色数据元素构成图像,数组的每一个元素对应于图像的一个像素值。这样 MATLAB 就可以利用其强大的矩阵计算功能实现对图像的数字处理。本案所设计的系统主要是利用 MATLAB 所提供的图形用户界面(GUI),实现一个可视的面向对象的操作界面。

    3.1 设计原则

    由于要求不同,设计出来的界面也就千差万别。但是,自从人们开始设计图形界面以来,界面设计的评判标准却没有太大的变化。简单说来,一个好的界面应遵从以下三个原则:简单性、一致性、习常性。

    1、简单性

    设计界面时,应力求简洁、直接、清晰地体现出界面的功能和特征。那些可有可无的功能应尽量删去,以保持界面的清洁。

    2、一致性

    所谓一致性包含两层意义:一是自己开发的界面风格要尽量一致;二是新设计的界面要与其他已有的界面风格不要截然相左。这是因为用户在初次使用新界面时,总是习惯于凭借经验进行试探。

    3、习常性

    设计界面时,应尽量使用人们所熟悉的标志和符号。用户可能并不了解界面的具体含义及操作方法,但他也可以根据熟悉标志做出正确猜测,自学入门。

    4、其他考虑因素

    除了以上对界面的静态要求外,还应注意界面的动态性能。如对用户操作的响应要迅速、连续。

    3.2 设计的一般步骤

    1、分析界面所要求实现的主要功能,明确设计任务。

    2、在稿纸上绘出界面草图,并对其进行审查。

    3、按照构思的草图,上机制作静态界面,并进行检查。

    4、编写界面动态功能的程序,对其功能进行逐项检查。

    3.3 系统功能的模块设计

    根据当前图像处理系统的总体设计样式和要求,该系统主要包括文件、工具、编辑、图像、调色、图像类型转换、颜色空间转换、正交变换等模块。其模块图如3.1所示:


    v2-ac0907a6e6242645e4da12e7976123b2_b.jpg


    图3.1 系统功能框图

    3.4 窗口界面的实现

    该系统界面的设计主要是利用MATLAB所提供的GU(IGraphUser Interface)向导设计控件而完成的,该向导可以实现多种控件的设计,给用户提供了一种友好的交互方式,同时也给操作带来很多方便。图形用户界面GUI是包含图形对象(如图形窗口、菜单、控件、文本)的用户界面,用户以某种方式选择或者击活这些对象会发生变化或引起动作。

    1、启动 GUI 的方法

    启动图形用户界面的方法有很多种,例如可以利用工具栏上的命令按钮,也可以采用菜单和命令的方式。在本人设计的案例中采用的是命令方式:在命令窗口直接输入 guide 命令,弹出的窗口如图 3.2 所示:




    v2-9aea72a7883c023e32785db4bcc36993_b.jpg


    图3.2 GUI 启动界面


    在弹出的guide quick ate new gui选项卡里面的start 窗口中选择 creBlank GUI 选项,这样就可以进入图形用户界面来设计我们的系统静态界面。



    v2-5a600ad501f9327afa18049d53e7c27b_b.jpg


    图3.3 Guide 界面


    上图就是 Guide 提供的图形界面设计工具集,在此界面下就可以利用控件组件、文本菜单、排列工具等对系统的界面进行设计。该系统的静态界面如图 3.4 所示:



    v2-69ac4b0cefec7f0c161d94ff2d415e7f_b.jpg


    图3.4 Guide 设计界面


    当静态界面设计完成以后,对该界面进行保存,此时 Guidie将自描述,动生成两个发布文件,分别是.fig 文件和.m 文件。Fig 文件:该文件包括图形窗口及其所有后裔的完全包括:该文件包括 GUI 设计、控制函数以及为子函数的用户控u Edit 对系统的菜所有对象的属性值。Fig 文件是一个二进制文件,调用 hgsave命令或界面设计编辑器的 file 菜单 save 选项保存图形窗口时将产生该文件。Fig 文件最有用的地方之一就是对象句柄的保存和引用,可以使用 open、openfig 和 hgload 命令打开一个后缀为.fig的文件。M 文件件回调函数,主要用于控制 GUI 展开时的各种特征。这个 M文件可以分为 GUI 初始化和回调函数两个部分,用户控件的回调函数根据用户与 GUI 的具体交互方式分别调用。

    设计好系统的界面以后,接下来就要利用 Men单进行设计,创建菜单的第一步就是利用 GUI 的工具栏上的Menu Edit 按钮启动相应的窗口。然后使用 New Menu 工具栏来创建菜单,然后可以指定菜单的属性。例如可以设置菜单的标签、分隔符、选种模式以及回调函数字符串。第二步就是创建菜单项。

    可以使用 New Menu Item 工具来添加菜单项,每一个菜单项也可以有级联的子菜单项。如果想要定义快捷菜单可以使用 NewContext Menu 工具来进行创建。本系统的菜单创建效果如图 3.5 所示:



    v2-b12b3bbb3907070a7fbb333439da2081_b.jpg


    图3,5 菜单

    3.5 各个模块的实现

    3.5.1 文件模块

    在文件模块中主要是包括对图像文件的打开、保存、打印设置和退出等操作。其中对图像文件如何读取以及如何写入是本模块的重点,下面主要介绍这两个功能的实现。

    1、打开

    对于打开菜单,主要利用的是 MATLAB 所提供的 uigetfile( )标准读盘文件处理对话框来选择要打开的图像,然后用 imread( )函数实现对图像文件的读取。其主要代码如下:

    function open_Callback(hObject, eventdata, handles)

    [filename, pathname] = uigetfile({'*.jpg';'*.bmp';'*.tif'}

    S = imread([pathname filename]);

    handles.S = S;

    axes(handles.axes1);

    imshow(S);

    handles.output = hObject;

    guidata(hObject, handles);


    2、保存

    保存菜单的实现主要应用uiputfile()标准写盘处理对话框来实现,其代码如下:

    function save_Callback(hObject, eventdata, handles)

    global hresult;

    [filename,pathname, filterindex] = uiputfile( ...

    {‘*.bmp;*.jpg;*.tif’,’Picture styles(*.bmp;*.jpg;*.tif)’;

    ‘*.bmp’,’Bitmap-files(*.bmp)’; ...

    '*.jpg','J-PEG (*.jpg)'; ...

    '*.tif','Gif-files (*.tif)'; ...

    '*.*', 'All Files (*.*)'}, ...

    'Save as');

    If isequal([ ilename,pathname],[0,0])

    return

    else

    File=fullfile(pathname,filename);

    saveas(hresult,File)

    End

    3.5.2编辑模块的实现

    该模块主要是对所要处理的图像进行一些常规的编辑操作,可以实现对图片进行放大和缩小,也可以对图片进行剪切和旋转。当然还可以实现很多有关编辑的操作,但是无论哪一种操作,其关键是如何获得该图像的句柄。句柄实际上就是分配给每个对象的数字标识,每次创建对象时,MATLAB就会自动为它创建一个唯一的句柄,这样只要我们能找到该句柄,就能对该对象进行操作。在MATLAB中,图形对象是一幅图中很独特的成分,它可以被单独地操作。由图形命令产生的每一件东西都是图形对象,它们包括图形窗口不仅仅说是图形,还有坐标轴、线条、曲面、文本和其它。这些对象按父对象和子对象组成层次结构。计算机屏幕是根对象,并且是所有其它对象的父对象。图形窗口是根对象的子对象;坐标轴和用户界面对象是图形窗口的子对象;线条、文本、曲面、补片和图象对象是坐标轴对象的子对象。这种层次关系在图 3.6 中给出



    v2-75c155d2f3d85725b3a45b008dcb9b90_b.jpg


    图3.6 对象层次结构


    根对象可包含一个或多个图形窗口,每一个图形窗口可包含一组或多组坐标轴。所有其它的对象(除了uicontrol和uimenu外)都是坐标轴的子对象,并且在这些坐标轴上显示。所有创建对象的函数当父对象或对象不存在时,都会创建它们。例如,如果没有图形窗口,plot(rand(size([1:10])))函数会用缺省属性创建一个新的图形窗口和一组坐标轴,然后在这组坐标轴内画线。

    每次创建一个对象时,就为它建立一个唯一的句柄。计算机屏幕作为根对象常常是 0。Hf_fig=figure命令建立一个新的图形窗口,变量Hf_fig中返回它的句柄值。图形窗口的句柄为整数,通常显示在图形窗口标题条中。其它对象句柄是MATLAB满精度的浮点值。所有产生对象的MATLAB函数都为所建立的每个对象返回一个句柄(或句柄的列向量)。这些函数包括plot,mesh,surf及其它。有一些图形由一个以上对象组成。比如,一个网格图由一个曲面组成,它只有一个句柄;而waterfall图形由许多线条对象组成,每个线条对象都有各自的句柄。例如,Hl_wfall=waterfall(peaks(20)) 对线条返回一个包含着 20 个句柄的列向量。在MATLAB中常用获得句柄的函数有以下几种

    gcf :获取当前图形窗口的句柄

    gca :获取当前坐标轴的句柄

    gco :获取当前对象的句柄

    gcbo :获取当前正在调用的对象的句柄

    gcbf :获取包括正在执行调用的对象的图形的句柄

    这样我们就可以使用这几个函数获得要操作对象的句柄。例如旋转菜单功能的实现就可以利用这样的代码实现:function xuanzhuan_Callback(hObject, eventdata, handles)

    h = getimage(gco); % 获得当前对象的句柄

    j=imrotate(h,-15); % 把图像以 15 度为单位顺时针旋转,并把该图象的句柄付给 jimshow(j)% 显示旋转后的图像在这个例子中,其中 h=getimage(gco)语句的作用就是利用getimage()函数获取当前图形对象的句柄,并把该句柄的值赋给了变量 h。以后只要是对该图像操作只要找到句柄 h 即可。本例子是只要单击一次编辑菜单的旋转命令,当前的图像就会顺时针旋转 15 度。



    v2-47da87b5e7b201c2b859b98229b7f834_b.jpg

    v2-a53d4c879f0da675fd57979dadedcbb0_b.jpg


     原始图像   旋转后图像

    图3.7 旋转

    其他编辑功能的实现与上边的例子大致相同,故一些具体的实现省略,详见程序的代码。

    3.5.3 图像模块的实现

    在 MATLAB 中,一幅图像可能包含一个数据矩阵,也可以包含一个颜色映射矩阵。因此 MATLAB 所能够处理的 4 种基本图像就是:索引图像、灰度图像、RGB 图像、二进制图像。该模块的主要功能就是把一幅真色彩图像显示成上述四种图像。该模块主要包括灰度、灰度倒置、腐蚀、膨胀、边界图等功能。

    1、灰度:灰度变换是一种简单而实用的方法,它可以使图像的动态范围增大,图像的对比度扩展,图像变清晰,特征明显,是图像增强的重要手段之一。它可分为比例线性变换、分段线性变换、非线性灰度变换。本例子采用的是分段线性变换。对感兴趣的(20~180)区间进行灰度变换,程序代码如下:

    x1= getimage(gco);

    figure

    imshow(x1)

    f0=0;g0=0;

    f1=20;g1=10

    f2=180;g2=230;

    f3=255;g3=255;

    figure,plot([f0,f1,

    r1=(g1-g0)/(f1-f0);

    b1=g0-r1*f0;

    r2=(g2-g1)/(f2-f1);

    b2=g1-r2*f1;

    r3=(g3-g2)/(f3-f2);

    b3=g2-r3*f2;

    [m,n]=size(x1);

    x2=double(x1);

    for i=1:m

    for j=1:n

    f=x2(i,j);

    (f<=f2)

    )=r1*f+b2;

    ow(mat2gray(g))

    g(i,j)=0;

    if(f>=f1)&g(i,j)

    elseif(f>=f2)&(f<=f3)

    g(i,j)=r3*f+b3;

    end

    end

    end

    figure

    imshow(mat2gray(g))


    v2-e440a2b1838155a6e09255a9255c2177_b.jpg


    图3.8 灰度变化


    v2-bcd6d4624f88fc3c8cee9ed9575d6472_b.jpg

    v2-21e3abccf800f9ee47701c02e64838b8_b.jpg


    原始图像 灰度图像

    图3.9 处理图像

    运行该程序后,得到分段线性变换后的图像。可以看出,通过这样一个变换,原图中灰度值在(0~20)和(180~255)之间的动态范围减少了,而原图中灰度值在 180~255 之间的动态范围增加了,从而这个范围内的对比度增加了,具体变化为图像中树干以上的区域两度明显增强。

    2、腐蚀:腐蚀操作就是把图像对象中边界的某些像素删除,输出像素值是输入图像相应像素及邻域内所有像素的最小值。

    function fs_Callback(hObject, eventdata, handles)

    h = getimage(handles.axes1);

    se=strel('arbitrary',eye(10));

    h1=imerode(h,se);

    figure;

    imshow(h1)


    v2-f68de41f35bc605f55da2c9d4240db4c_b.jpg


    图3.10 腐蚀

    3、膨胀:膨胀一般是给图像中的对象边界添加像素。在膨胀操作时,输出像素值是输入图像相应像素及邻域内所有像素的最大值。

    function pz_Callback(hObject, eventdata, handles)

    h = getimage(handles.axes1);

    se=strel('square',5);

    h2=imdilate(h,se);

    figure;

    imshow(h2,'notruesize')


    v2-0a4f5479ff26e83594317eeff60b300b_b.jpg


    图3.11 膨胀

    4、边界图:又称为骨架提取,寻找二值图像的细化结构是图像处理的一个基本问题。在图像识别和图像压缩中要经常用到这样的细化结构。例如,在识别字符之前,往往要对字符做细化处理,求出字符的细化结构。

    function ys_Callback(hObject, eventdata, handles)

    i=getimage(handles.axes1);

    BW=edge(i,'sobel');

    imshow(BW)


    v2-4856865206404e4993028f340a58e605_b.jpg


    图3.12 边界提取

    以上各种操作都是形态学图像处理经常要用到的一些基本操作,他们对于形态学重构有着重要的作用。所谓形态学重构就是根据一幅图像的特征对另一幅图像进行重复膨胀、或腐蚀等操作,直到该图像的像素值不再变化为止,用来强调图像中与掩模图像中指定对象相一致的部分,同时忽略图像中的其他对象。这在医学影像领域有着极其重要的作用。

    3.5.4图像类型转换模块的实现

    要对一幅索引图像滤波,首先必须将它转换成真色彩图像,否则要的作用。图像类型转换模块的实现在许多图像处理工作中,都对图像类型有特定的要求,比如结果是毫无意义的。在MATLAB中,各种图像类型之间的转换关系如图所示:


    v2-ff96fa0a3ea4b0852f22e79c4778ac78_b.jpg


    图3.13 图像转换关系

    MATLAB 的图像处理工具箱提供了许多图像类型转换函数,来实现各种图像类型的转换。例如:dither 函数,该函数的功能是通过颜色抖动来增加输出图像的颜色分辨率,从而实现转换图像。该函数的调用格式如下:X=dither(RGB,map) 表示将真色彩图像 RGB 按照指定的颜色映 抖动成索引图像MATLAB像表 map 抖动成索引图像X。BW=dither(I) 表示将灰度图像 I 抖动成二值图像 BW。

    例:

    I=imread(‘trees.tif’);

    Subplot(1,2,1)

    Imshow(I)

    BW=dither(I);

    Subplot(1,2,2)

    Imshow(BW)


    v2-6530c7ae259db96cbae47c7648ee3097_b.jpg


    图3.14 二值处理

    因此在对图像的处理的过程中图像类型的转换变得尤为重要。该模块以索引图像、灰度图像和真色彩图像之间的相互转换为例,具体实现代码如下:

    1、m2bw:该函数的功能是通过设置亮度阈值将真色彩、索引、灰度图像转换成二值图。该函数的调用格式如下:

    BW=im2bw(I,level)

    BW=im2bw(x,map,level)

    BW=im2bw(rgb,level)

    分别表示将灰度图像、索引图像和真色彩图像转换成二值图像 BW,level 是归一化的阈值,取值在[0,1]之间。本系统所采用的是第一种调用格式,具体程序如下:

    function im2bw_Callback(hObject, eventdata, handles)

    h = getimage(handles.axes1);

    subplot(1,2,1);

    imsh

    show );

    ow(h);

    bw=im2bw(h,0.8);

    subplot(1,2,2);

    im (bw);


    v2-7297d2a6396fce5bcaf6d626108071f0_b.jpg


    图3.15 灰度到二值转换

    2、rgb/ind:将 RGB 图像转换成索引图像

    function rgb2ind_Callback(hObject, eventdata, handles)

    h = getimage(handles.axes1);

    [x,map]=rgb2ind(h,0.7);

    imshow(x,map)


    v2-b15a20b97abded1e9c91e10437462250_b.jpg


    图3.16 真色彩至索引转换

    3.5.5 正交变换

    在图像处理技术中,图像的正交变换技术有着广泛的应用,是图像处理的重要工具。通过变换图像,改变图像的表示域及表示数据,可以给后继工作带来极大的方便。例如离散余弦变换(DCT 变换)使能量集中在少数数据上,从而实现数据压缩,便于图像传输和存储。

    1、DCT变换:离散余弦变换,简称DCT,是一种实数域变换,其特点是变换速度快,很适于做图像压缩和随机信号处理。DCT变换是JPEG、MPEG等数据压缩的重要数学基础。DCT变换的实现方法有两种:一种是基于FFT的快速算法,这是通过工具箱提供的dct2 函数实现的;另一种使DCT变换矩阵的方法,这种方法非常适合做 8×8 或 16×16 的图像块的DCT变换,工具箱提供了dctmtx函数来计算变换矩阵。下面的例子将一幅图像进行余弦变换,然后将DCT变换值小于 10 的系数设为 0,再利用idt2 函数重构图像。

    function dct_Callback(hObject, eventdata, handles)

    h = getimage(handles.axes1);

    g=rgb2gray(h);

    d=dct2(g);

    figure;

    subplot(1,2,1);

    imshow(log(abs(d)),[]);

    图像的绝大部分能量位于变换矩阵的左上角。

    subplot(1,2,1);

    colormap(gray(4));

    d(abs(d)<10)=0;

    i=idct2(d)/255;

    subplot(1,2,2);

    imshow(i)

    下面图像就是经过 DCT 变换后的图像,通过该图像可以看出



    v2-42e814d1ecad64e4e56da7f0beaa108e_b.jpg


    图3.17 DCT 变换

    下图则是经过重构的图像和原图像的对比。


    v2-7a74affd57f9b038414c8124d89a3c2b_b.jpg


    图3.18 压缩重构

    通过对比可以看出,经过 DCT 压缩后,图像的绝大部分能量都得到了很好的保留,所以重构图像的时候才能保证重构以后的图像有很少的失真。

    2、 Radon变换:Radon变换在图像处理领域有着很重要的应用价值,尤其是对医学的影像领域有着重要的指导意义。医学上常用的CT扫描就是基于 衰减系数,如果能确定三维图像。但是通过X射线透视时,只能测量到人体的直线上的X射线衰减系数的平均值,当直线变化时,此值也会跟着变化,这样就很难重建其断层。但是,能否通过扫描测量的平均值求整个衰减系数的分布,从而有效的重建图像呢?Radon变换为此提供了一个非常好的思路。本系统所用的Radon变换就是对图像先进行骨架提取,再沿 0 度到 180 度每隔一度作Radon变换,然后利用iradon函数来重构骨架图像。通过图像对比可以知道,重构后的图像和原图像十分接近。

    function radon_Callback(hObj

    - to be defined in a future version of

    % handles structure

    h =

    bw=edge(h);

    figu

    subplot(2,2,1);

    imshow

    theta=0:2:178;

    [r,xp]=radon(bw

    subplot(2,2,2);

    imagesc(theta,xp,r);

    colorm

    不同物质的X射线

    人体的衰减系数分布,就能重建其断层或

    ect, eventdata, handles)

    % hObject handle to radon (see GCBO)

    % eventdata reserved

    MATLAB

    with handles and user data (see GUIDATA)

    getimage(handles.axes1);

    re;

    (bw);

    ,theta);

    ap(hot);

    axis off

    i2=iradon(r,2);

    subplot(2,2,3);

    imshow(i2);



    v2-f0ccc0cce6e9082dbde116ff074cb21d_b.jpg


    图3.19 Radon 变换

    3.5.6 其他模块功能的实现

    基于MATLAB 的图像处理系统是一个功能强大的系统,它还可以实现颜色空间的转换,能对一些单色图像进行各种调色,也可以调用 MATLAB 绘图工具箱进行各种简单图形的绘制。当然还有许多的功能有待于进一步完善,至于详细的实现代码,在这里就不在赘述。

    展开全文
  • 基于MATLAB数字图像处理系统摘要:数字图像处理技术是20世纪60年代发展起来的一门新兴学科,随着图像处理理论和方法的进一步完善,使得数字图像处理技术在各个领域得到了广泛应用,并显示出广阔的应用前景。MATLAB...
  • Matlab 数字图像处理 1、Matlab R2017b 简介 1.1、Matlab 软件环境 1.1.1、软件界面 1.1.2、Matlab 命令与程序 可以在 >> 提示符后面输入简单的算式,如 5*3-2;或带有函数的算式,如 sin(pi/2)*sqrt(3)/2: ...
  • 基于MATLAB GUI的数字图像处理系统摘要:基于数字信号处理原理,在数字滤波器设计理论和Matlab 编程技术及其GUI 图形用户界面设计的基础上,开发了具有交互式特点的数字图像处理GUI软件,界面操作简单方便。MATLAB...
  • 基于数字图像处理技术的答题卡识别方法摘 要背景:随着科技的发展,电子与计算机技术的进步,答题卡的出现大大减轻教学工作者们批改试卷的工作量。答题卡是光标阅读机输入信息的载体,是配套光标阅读机的各种信息...
  • 基于MATLAB数字图像处理实验[图文,完美运行]实验1.1 直方图 一.实验目的1.熟悉matlab图像处理工具箱及直方图函数的使用;2.理解和掌握直方图原理和方法;二.实验设备1.PC机一台;2.软件matlab。三.程序设计...
  • 18该课题为基于MATLAB的特征匹配的数字识别。带GUI界面,可识别0-9十个阿拉伯数字,GUI做成具有滚屏的效果,每识别完一个数字,该数字就滚到旁边显示。可二次开发成语音九宫格的数字识别系统。带论文,
  • Matlab手写数字识别

    2017-06-18 23:44:13
    利用matlab制作的手写数字识别系统、代码可读性强,结构清晰、GUI运行界面、在Matlab R2014b下编辑完成,有手写版,也可导入图片识别。
  • 车牌识别之简易识别程序代码I=imread('car2.jpg');...%功能是将真彩色图像转换为灰度图像,即灰度化处理 figure(2),subplot(1,2,1),imshow(I1);title('灰度图'); figure(2),subplot(1,2,2),imhist(I1);title('...
  • 使用matlab数字手写进行识别,有界面gui。 手写识别是常见的图像识别任务。计算机通过手写体图片来识别出图片中的字,与印刷字体不同的是,不同人的手写体风格迥异,大小不一, 造成了计算机对手写识别任务的一些...
  • CNN卷积神经网络实现手写数字识别,Matlab+minist数据集都有,在matlab上可直接运行,新手友好,亲测可用。
  • 设计了一种基于matlab手写数字识别系统,全面覆盖多种分类器,有Fisher线性判别,贝叶斯分类器,神经网络,k近邻等等线性与非线性的分类器,识别的准确率较高,具体依据各个算法的不同,可以在此基础上进行改进。
  • MATLAB手写数字识别

    万次阅读 多人点赞 2019-07-31 14:07:22
    本文主要是根据《matlab手写神经网络实现识别手写数字》博客中的代码进行试验。由于没有数据集,所以采用了MNIST数据集进行代码的运行。数据集不同所以需要对代码进行微小改动。 简介 数据处理:4000张作为训练样本...
  • 源代码 syntheticDir = fullfile(toolboxdir('vision'), 'visiondata','digits','synthetic'); handwrittenDir = fullfile(toolboxdir('vision'), 'visiondata','digits','handwritten'); % |imageDatastore| ...
  • CNN——卷积神经网络类数字识别matlab实现代码,原因是现在而与Matlab c++ / CUDA库前端比一个Matlab库。这个项目提供了matlab类卷积神经网络的实现。勒存这网络是由Yann和已经成功地使用在许多实际应用,如手写数字...
  • 数字图像处理开题报告题目一:图像处理软件1、设计内容及要求:(1)、独立设计方案,实现对图像的十五种以上处理(比如:底片化效果、灰度增强、图像复原、浮雕效果、木刻效果等等)。(2)、参考photoshop软件,...
  • 图像退化/复原处理的模型二.噪声模型2.1使用imnoise添加噪声 一.图像退化/复原处理的模型 退化函数是指将退化过程模型化,它和加性噪声项一起,作用于输入图像f(x,y),产生一幅退化图像g(x,y): g(x,y)=H[f(x,y)]+η(x...
  • MATLAB对MNIST手写数字数据库,编程实现来提取其链码。
  • 熟悉matlab图像处理工具箱及图像缩放函数的使用;2.掌握图像缩放的方法和应用;二.实验设备1.PC机一台;2.软件matlab;三.程序设计在matlab环境中,程序首先读取图像,然后调用图像缩放函数,设置相关参数,再...
  • MATLAB图像与视频处理实用案例详解》详细讲解了25个MATLAB图像与视频处理实用案例(含可运行程序),涉及雾霾去噪、答题卡自动阅卷、肺部图像分割、小波数字水印、图像检索、人脸二维码识别、车牌定位及识别、...
  • MATLAB图像与视频处理实用案例详解》详细讲解了25个MATLAB图像与视频处理实用案例(含可运行程序),涉及雾霾去噪、答题卡自动阅卷、肺部图像分割、小波数字水印、图像检索、人脸二维码识别、车牌定位及识别、...
  • CNN识别手写数字,很好的机器学习初心者学习资料,里面包含了MATLAB代码和详细的注释,可以直接运行
  • PCA算法是基于图像重构的方法进行图像特征识别的。内有训练样本、多个测试图片以及文档说明。 识别步骤: ① 选择训练样本 ② 计算样本平均数字特征,数字特征空间 ③ 读取待识别数字,进行连通分量分割,确定需要...
  • 本ppt前两部分展示了作者利用PCA、SVM、ANN对ORL、MNIST数据集进行分类效果的比较及分析,同时最后一部分展示了GAN在图像生成中的简单应用

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,389
精华内容 1,355
关键字:

matlab数字图像处理手写数字

matlab 订阅