最近开始学习数字图像处理,使用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. SSh on Ubuntu

    ssh程序分为有客户端程序openssh-client和服务端程序openssh-server.如果需要ssh登陆到别的电脑,需要安装openssh-client,该程序Ubuntu是默认安装的.而如 ...

  2. SSH-简单登陆业务详解,从环境部署到代码编写

    一直都是半解半知的情况下动手去实现某些功能,但是竟然也可以成功, 而我发现你花2小时听视频看所谓的理论,不如花2小时直接做个功能出来, 更加深了对此框架的理解,中间遇到问题后,可以上网再查详细的知识点 ...

  3. 容易出错的 if 语句

    下面列举几个容易出错的if语句实例,如果后续还有新的发现,还会继续更新! 出错一:在括起控制表达式的括号后面加分号 ; ); printf("值为正"); 初次运行,感觉一切正常, ...

  4. QA:无法为具有固定名称“MySql.Data.MySqlClient”...

    Question: 无法为具有固定名称“MySql.Data.MySqlClient”的 ADO.NET 提供程序加载在应用程序配置文件中注册的实体框架提供程序类型“MySql.Data.MySqlC ...

  5. (转) 解密H264、AAC硬件解码的关键扩展数据处理

    出自:http://blog.itpub.net/30168498/viewspace-1576794/       通过上一篇文章,我们用ffmpeg分离出一个多媒体容器中的音视频数据,但是很可能这 ...

  6. 详细分析Java中断机制[转]

    1. 引言 当我们点击某个杀毒软件的取消按钮来停止查杀病毒时,当我们在控制台敲入quit命令以结束某个后台服务时……都需要通过一个线程去取消另一个线程正在执行的任务.Java没有提供一种安全直接的方法 ...

  7. Cisco配置单臂路由及静态路由

    实验环境: 如图下图所示,PC0.PC1.PC2.PC3分别属于不同的VLAN,通过配置单臂路由及静态路由,实现不同VLAN之间的PC能相互访问. 操作步骤: 1. 思科 2960交换机SW1配置信息 ...

  8. windows server 安装phpVirtualBox web服务

    这是我在Windows server 2012 下的安装过程 (1) 安装virtualbox (2) 安装IIS和PHP, 参考: https://msdn.microsoft.com/zh-cn/ ...

  9. SpringCloud 集锦

    一.SpringCloud和Dubbo SpringCloud整合了一套较为完整的微服务解决方案框架,而Dubbo只是解决了微服务的几个方面的问题. content Dubbo SpringCloud ...

  10. CentOS 7下彻底卸载MySQL数据库

    转载: https://zhangzifan.com/centos-7-remove-mysql.html