最近开始学习数字图像处理,使用matlab实现,下面我就来记录笔记和体会,一方面是给大家提供参考,另一方面是防止我忘记了。

复习一下:

1.数字图像是用一个数字矩阵来表示的,数字阵列中的每个数字,表示数字图像的一个最小单位,称为像素。

2.数字图像处理可以理解为两个方面的操作:一个是图像到图像的处理(如图像的灰度转换,图像增强等),另外一个是图像到非图像的一种表示,比如图像的测量。

3.数字图像处理的研究内容有很多个方向,比如:

  ·图像数字化:将一幅图像以数字的形式表示,主要包括采样和量化两个过程。

  ·图像增强:将一幅图像中的有用信息进行增强,同时对无用的信息进行抑制,提高图像的可观察性。

  ·图像的几何变化:改变图像的大小、形状等。

  ·图像的变换:通过数学的方法,将空间域的图像信息  转换  到 频域、时频域等空间进行分析。

  ·图像识别与理解:通过对图像中各种不同的物体特征进行量化描述后,将其所期望获得的目标物进行提取,并且对所提取的目标物进行一定的定量分析。

4.位图可以使用二维的矩阵进行表示,不同的格式图像,存储格式不一样,主要有:

 ·二值图像:图像像素使用二维矩阵表示,矩阵的值就是像素的颜色值,值只有两个值0和1(或者0和某个不为0的值,比如0和255),只能表示两种颜色:黑和白,一般值越大越趋于白;

  ·8位索引图像:图像像素使用二维矩阵表示,但是矩阵的值不是像素的颜色值,矩阵的值表示索引表的序号;也就是说,8位索引图像需要一个矩阵和一张索引表来表示,索引表有256个序号,每个序号对应一组RGB值,表示了一种颜色,因此8位索引图像的一个像素有256中颜色变化。

  8位索引图像有彩色图像和灰度图像之分,灰度图像的RGB值相等且都等于序号的值;而彩色图像的RBG不相等。

  ·24位真彩图:也是用矩阵表示,图像像素直接用RGB颜色显示,而不是通过颜色索引表。图像的像素用三个变量表示即(R,G,B),每个变量从0~255变化,因此一个像素也就是8bit*3=24bit,一个像素用24bit表示可以有2^24种颜色。

  今天主要学的是:

    ·RGB图像转为灰度图像

    ·有颜色的索引表位图转换成灰度图

    ·RGB图像转为索引图像

    ·灰度图像转为索引图像

    ·灰度图像转为二值图像

    ·RGB图像转为二值图像

1、RGB图像转为灰度图像

  这里的RGB图像为任何一张彩色图,然后经过转换之后,得到一张灰度图像,使用matlab实现如下所示:

close all ;%关闭所有文件
clear all ;%清除所有变量
clc ; %清屏
X=imread('Hydrangeas.jpg');%读入RGB图像
I=rgb2gray(X);%进行灰度变化
set(0,'defaultFigurePosition',[100,100,1000,500]);%设置显示图像的窗口大小
set(0,'defaultFigureColor',[0 0 0]);%设置显示的背景颜色
subplot(121),imshow(X);%显示读入的图像
subplot(122),imshow(I);%显示进行灰度变化后的图像

  运行一下,如下图所示:

得到如下结果:

下面说一下代码中需要注意的事项:
    ·imread是读入图像的函数,读入的图像需要放到当前的工作目录下,或者直接输入路径:X=imread('F:/图像处理/Hydrangeas.jpg');
    ·rgb2gray是将彩色图像转换成灰度图像的函数
    ·运行之后,可以查看X和I的变量:

X是三维的,而I是二维的,这是需要注意的。

     ·然后:set(0,'defaultFigurePosition',[100,100,1000,500]);中:

[100,100,1000,500]:前面的两个参数100,1000主要是用来设置窗口的相对位置,后面的两个参数1000,500主要设置窗口大小,1000是设置窗口的横向长度,500是设置窗口的高度。
    set(0,'defaultFigureColor',[0 0 0]);中:
[0 0 0]表示设置背景颜色为黑色。[1 0 0]表示设置背景颜色为红色,等等。     ·imshow是显示图像的函数。
subplot(121)是窗口显示图像的方式,设置为在同一个窗口显示,一行两列。然后subplot(121),imshow(X)则是:X显示第一幅图像在第一行第二列的第一个位置。
subplot(122),imshow(I)则是:I显示第一幅图像在第一行第二列的第二个位置。效果如上面所示。

2.有颜色的索引表位图转换成灰度图
  但是这里输入的8bit的带索引表的彩色图像,然后将它转换成灰度图。代码如下所示:
close all ;
clear all ;
clc ;
[X,map] = imread('Hydrangeas.bmp');%读入图片
newmap = rgb2gray(map);%将彩色的索引表转换成灰色的索引表
figure, imshow(X,map);%显示原始的图片
figure, imshow(X,newmap);%显示转换后的图片
  图片如下所示:

下面说一下需要注意的地方:
  从上图中我们看到,X是一个二维的变量,此外map、newmap也是一个二维的变量;变量的含义是不一样的,X变量表示的是这是一张768x1024像素大小的图片。
而map和newmap则表示的颜色索引表的内容,总共256行,每行3列(即RGB)。
  这里用figure进行显示图像。 3.RGB图像转为索引图像
  这里将一幅RGB图(彩色图,比如说jpg、真彩色等彩色图)转换成索引图,也就是带索引表的图像。这里转换成索引的彩色图像,与第1.不同,代码如下:
close all ;
clear all ;
clc ;
RGB=imread('F:/图像处理/Hydrangeas.jpg');
[X1,map1]=rgb2ind(RGB,64);
[X2,map2]=rgb2ind(RGB,0.2);
map3 = colorcube(128);
X3 = rgb2ind(RGB,map3);
set(0,'defaultFigurePosition',[100,100,1000,500]);
set(0,'defaultFigureColor',[0 1 1]);
figure;
subplot(131),imshow(X1,map1),title('最小方差转换');
subplot(132),imshow(X2,map2),title('均匀量化发转换');
subplot(133),imshow(X3,map3),title('颜色近似法转换');
下面解释一下代码:
    RGB=imread('F:/图像处理/Hydrangeas.jpg');
  这是读入图像了,跟前面的两种转换方式的意思一样,读入的是一幅彩色图像。
    [X1,map1]=rgb2ind(RGB,64);
    [X2,map2]=rgb2ind(RGB,0.2);
  这两行代码都用到了rgb2ind这个函数,我们来看一下这个函数的意思:

由此,我们可以知道,
  [X1,map1]=rgb2ind(RGB,64);就是使用最小方差量化将RGB图像转换为索引图像X. MAP最多包含N种颜色。 N必须<= 65536。
  [X,MAP] = rgb2ind(RGB,TOL)使用均匀量化将RGB图像转换为索引图像X. MAP最多包含(FLOOR(1 / TOL)+1)^ 3种颜色。 TOL必须介于0.0和1.0之间。、
这里FLOOR=1,当TOL等于0.2时,则表示216种颜色。

    map3 = colorcube(128);
    X3 = rgb2ind(RGB,map3);

  上面的两行代码则是创建一个指定颜色数目的所以表,然后用这个索引表进行近似显示RGB图。colorcube增强的彩色立方体颜色图。 colorcube(M)返回一个包含彩色立方体的M-by-3矩阵。 colorcube本身的长度与当前的色彩映射相同。 彩色立方体在RGB色彩空间中包含尽可能多的定期间隔的颜色,同时尝试提供更多的灰色,纯红,纯绿和纯蓝色的步骤。 该多维数据集的算法灵感来自默认的Macintosh系统colortable,对于M = 256,colorcube返回完全相同的颜色。 对于M <8,返回长度为M的灰色斜坡。
后面的代码则是显示了,不再多说。
下面的显示效果:
    

4.灰度图像转为索引图像

  我们先将彩色图像转换成灰度图像,然后再讲灰度图像转换成8种颜色的索引表(也就是索引表长度为8),代码如下所示:

close all ;
clear all ;
clc ;
RGB=imread('F:/图像处理/Hydrangeas.jpg');
gray=rgb2gray(RGB);%得到灰度图
[X,map] = gray2ind(gray,8);%将灰度图转成索引图,8种颜色
set(0,'defaultFigurePosition',[100,100,1000,500]);
set(0,'defaultFigureColor',[0 0 0]);
figure;
subplot(121), imshow(gray);%显示灰度的图片
subplot(122), imshow(X,map);%显示转换后的图片

  这里需要说明的是用到了gray2ind函数,这个就是将灰度图像转换成索引图像的函数,功能如下所示:

  我们这里取N=8,索引表长度为8。运行效果如下所示:

5.灰度图像转为二值图像

  我们也是先将RGB图转成灰度图,然后在将灰度图转为二值图像,代码如下所示:

close all ;
clear all ;
clc ;
RGB=imread('F:/图像处理/Hydrangeas.jpg');
gray=rgb2gray(RGB);%得到灰度图
BW1 = im2bw(gray,0.3);%将灰度图转成二值图,阈值为0.4
BW2 = im2bw(gray,0.7);%将灰度图转成二值图,阈值为0.7
set(0,'defaultFigurePosition',[100,100,1000,500]);
set(0,'defaultFigureColor',[1 1 1]);
figure;
subplot(131), imshow(gray);%显示灰度的图片
subplot(132), imshow(BW1);%显示转换后的图片
subplot(133), imshow(BW2);%显示转换后的图片

这里需要说明的是,灰度转二值图的函数是im2bw,后面的阈值的意思是,判断哪些该转换成1,哪些该转换成0,阈值设置得越小,得到的二值图像的白色面积越多。代码运行的效果如下所示:

6.RGB图转为二值化图像

读进RGB图之后,直接转为二值图像,代码如下所示:

close all ;
clear all ;
clc ;
RGB=imread('F:/图像处理/Hydrangeas.jpg');
BW1 = im2bw(RGB,0.3);%将灰度图转成二值图,阈值为0.4
BW2 = im2bw(RGB,0.7);%将灰度图转成二值图,阈值为0.7
set(0,'defaultFigurePosition',[100,100,1000,500]);
set(0,'defaultFigureColor',[1 1 1]);
figure;
subplot(131), imshow(RGB);%显示灰度的图片
subplot(132), imshow(BW1);%显示转换后的图片
subplot(133), imshow(BW2);%显示转换后的图片

运行效果如下所示:

数字图像处理笔记与体会(一)——matlab编程基础的更多相关文章

  1. 《数字图像处理原理与实践(MATLAB版)》一书之代码Part6

    本文系<数字图像处理原理与实践(MATLAB版)>一书之代码系列的Part6,辑录该书第281至第374页之代码,供有须要读者下载研究使用.代码运行结果请參见原书配图,建议下载代码前阅读下 ...

  2. 《数字图像处理原理与实践(MATLAB版)》一书之代码Part2

    本文系<数字图像处理原理与实践(MATLAB版)>一书之代码系列的Part2(P43~80),代码运行结果请參见原书配图,建议下载代码前阅读下文: 关于<数字图像处理原理与实践(MA ...

  3. 《数字图像处理原理与实践(MATLAB文本)》书代码Part7

    这篇文章是<数字图像处理原理与实践(MATLAB文本)>一本书的代码系列Part7(由于调整先前宣布订单,请读者注意分页程序,而不仅仅是基于标题数的一系列文章),第一本书特色186经225 ...

  4. 《数字图像处理原理与实践(MATLAB版)》一书之代码Part1

    本文系<数字图像处理原理与实践(MATLAB版)>一书之代码系列的Part1(P1~42).代码运行结果请參见原书配图. P20 I = imread('lena.jpg');BW1 = ...

  5. 《数字图像处理原理与实践(MATLAB版)》一书之代码Part5

    <数字图像处理原理与实践(MATLAB版)>一书之代码Part5 本文系<数字图像处理原理与实践(MATLAB版)>一书之代码系列的Part5.辑录该书第225至第280页之代 ...

  6. 数字图像处理原理与实践(MATLAB版)勘误表

    本文系<数字图像处理原理与实践(MATLAB版)>一书的勘误表. [内容简单介绍]本书全面系统地介绍了数字图像处理技术的理论与方法,内容涉及几何变换.灰度变换.图像增强.图像切割.图像去噪 ...

  7. Matlab编程基础

    平台:Win7 64 bit,Matlab R2014a(8.3) “Matlab”是“Matrix Laboratory” 的缩写,中文“矩阵实验室”,是强大的数学工具.本文侧重于Matlab的编程 ...

  8. 大数据学习笔记——Java篇之网络编程基础

    Java网络编程学习笔记 1. 网络编程基础知识 1.1 网络分层图 网络分层分为两种模型:OSI模型以及TCP/IP网络模型,前者模型分为7层,是一个理论的,参考的模型:后者为实际应用的模型,具体对 ...

  9. Reading | 《数字图像处理原理与实践(MATLAB版)》(未完待续)

    目录 一.前言 1.MATLAB or C++ 2.图像文件 文件头 调色板 像素数据 3.RGB颜色空间 原理 坐标表示 4.MATLAB中的图像文件 图像类型 image()函数 imshow() ...

随机推荐

  1. Sword protobuf学习一

    protobuf简介 Protocol Buffers,是Google公司开发的一种数据描述语言,类似于XML能够将结构化数据序列化,可用于数据存储.通信协议等方面. 它不依赖于语言和平台并且可扩展性 ...

  2. 自然语言交流系统 phxnet团队 创新实训 个人博客 (十一)

    名思义是 给游戏场景 添加一个 天空背景 让游戏更加精美,更具有魅力 添加天空盒 有两种方式  1 : 在当前相机上添加skybox   2 : 在当前场景上添加skybox 上面的两种方式的结果是一 ...

  3. 深入浅出 kvm qemu libvirt

    在所谓的kvm技术中,应用到的其实有2个东西:qemu+kvmkvm负责cpu虚拟化+内存虚拟化,实现了cpu和内存的虚拟化,但kvm不能模拟其他设备:qemu是模拟IO设备(网卡,磁盘),kvm加上 ...

  4. e612. Moving the Focus to the Next or Previous Focusable Component

    The methods to move the focus to the next or to the previous focusable component are Component.trans ...

  5. CentOS 7系统查看系统版本和机器位数

    前言 由于不经常使用linux,每当使用的时候就是安装软件,安装软件的时候就要选择安装包平台,是32位的还是64位的.这时候突然发现不知道怎么查,于是百度.虽然轻而易举百度出来,但仍旧没有自己的笔记看 ...

  6. Maven最佳实践-distributionManagement

    分发构件至远程仓库 mvn install 会将项目生成的构件安装到本地Maven仓库,mvn deploy 用来将项目生成的构件分发到远程Maven仓库.本地Maven仓库的构件只能供当前用户使用, ...

  7. NFS 网络挂载问题 解决

            在进行嵌入式开发时,通常使用nfs,在开发板上面远程挂载主机上的目录,这样,省去了拷贝复制文件的过程,加快开发速度.在这里,给出自己在nfs相关的设置上出现的问题.         本 ...

  8. 安装oh my zsh和git插件

    http://macshuo.com/?p=676   --安装oh my zsh http://www.jianshu.com/p/9189eac3e52d https://github.com/r ...

  9. 7 云计算系列之Neutron安装与配置

    preface 紧接上一章,我们这里开始部署网络服务Neutron,可参考官网文档:http://docs.openstack.org/newton/install-guide-rdo/neutron ...

  10. wget 下载指定url路径下的 指定类型的(全部)文件

    wget http://mirrors.ustc.edu.cn/ubuntu/pool/main/g/gcc-4.4/ -r -np -nd -A .deb -e robots=offwget htt ...