精通Matlab数字图像处理与识别      

文章目录


在这里插入图片描述

1. 数字图像处理与识别

1.1数字图像

       根据图像的属性不同,图像分类方法也不同。从获取方式上图像分为拍摄类图像和绘制类图像;从颜色上图像分为彩色图像、灰度图像和黑白图像等;从图像的内容上图像分为人物图像,风景图像等;从功能上又分为流程图、结构图、心电图、电路图、设计图等。
       在数字图像处理领域,将图像分为模拟图像数字图像两种,计算机处理的信号都是数字信号,所以在计算机上处理的图像均为数字图像。根据数字图像在计算机中表示方法不同,分为二进制图像,索引图像(如果颜色较少,则用颜色表表示这几种颜色,图像的像素由颜色表的索引表示,可降低所需存储空间),灰度图像,RGB图像和多帧图像;根据计算机中图像文件格式不同,图像又分为位图和矢量图。可见,图像的属性是多角度的,图像的分类也是多维的。

实质

  • 线性代数和矩阵论的角度,数字图像是由图像信息组成的二维矩阵,矩阵的每个元素代表对应位置上的图像亮度和/或色彩信息。
    表示
  • 由于随机变化和噪声的原因,图像在本质上是统计性的。因而有时将图像函数作为随机过程的实现来观察存在其优越性。这时有关图像信息量和冗余的问题可以用概率分布和相关函数来描述和考虑。例如,如果知道概率分布,可以用熵(Entropy) 来度量图像的信息量,这是信息论中一个重要的思想。
  • 线性系统的角度考虑,图像及其处理也可以表示为用狄拉克冲激公式表达的点展开函数的叠加。在大多数时候,我们都考虑使用线性系统近似的方式对图像进行近似处理以简化算法。虽然实际的图像并不是线性的,图像坐标和图像函数的取值都是有限的和非连续的。

图像的空间分辨率: 通常会称一幅大小为M×N的数字图像的空间分辨率为M×N像素。
       当高分辨率下的图像以低分辨率表示时,在同等的显示或者打印输出条件下,图像的尺寸变小,细节变得不明显;而当将低分辨率下的图像放大时,则会导致图像的细节仍然模糊,只是尺寸变大。这是因为缩小的图像已经丢失了大量的信息,在放大图像时只能通过复制行列的插值方法来确定新增像素的取值。

图像的灰度级分辨率: 灰度级分辨率又叫色阶,是指图像中可分辨的灰度级数目,即前文提到的灰度级数目L。由于灰度级度量的是投射到传感器上光辐射值的强度,所以灰度级分辨率也叫辐射计量分辨率。
      灰度级分辨率逐渐降低,图像中包含的颜色数目变少,图像细节表达受到影响。

1.2 数字图像处理与识别

数字图像处理 (Digital Image Processing)指对图像进行处理,进行各种加工来改善图像的外观,是对图像的修改和增强,是作为一种 预处理,供其他图像分析、识别算法使用。

数字图像分析(Digital Image Analyzing)是指对图像中感兴趣的目标进行检测和测量,以获得客观的信息。将一幅图像转化为另一种非图像的抽象形式,包括图像中某物体与测量者的距离以及目标对象的计数或其尺寸等,以及边缘检测和图像分割、特征提取以及几何测量与计数等。

数字图像识别(Digital Image Recognition)主要研究图像中各目标的性质和相互关系,识别出目标对象的类别,从而理解图像的含义。从图像分析中得到的相关描述(特征)对目标进行归类,输出我们感兴趣的目标类别标号信息(符号)。

计算机图形学(Computer Graphics)。此概念与数字图像分析大致相反,它是一个对由概念或数学表述的物体图像进行处理和显示的过程。

图像处理的典型案例——X光照片的增强
图像识别的典型案例——人脸识别

数字图像处理与识别 基本步骤

  1. 图像的点运算。 改善图像的外观,灰度归一化。如图像拉伸、对比度增强、直方图均衡以及直方图匹配等。
  2. 图像的几何变换。 前期预处理工作必要的一部分,是图像处理中相对固定和程式化的内容。如图像的几何归一化图像校准
  3. 图像增强。 相对简单却最具艺术性的领域之一。根据需要突出 某些信息,同时削弱或去除某些不需要的信息的处理方法。
  4. 小波变换。 图像压缩、边缘和特征检测以及纹理分析。小波变换则基于一些有限宽度的基小波,这些小波不仅在频率上是变化的,而且具有有限的持续时间。
  5. 图像复原。 与图像增强相似,其目的也是改善图像质量。但是图像复原是试图利用退化过程的先验知识使已被退化的图像恢复本来面目。建立在比较严格的数学推导上。
  6. 彩色图像处理。 主要包括对全彩图像的处理,也包括灰度图像的伪彩色化。
  7. 形态学图像处理。 基于物体自然形态的图像处理分析方法。其基本思想是用具有一定形态的结构元素去度量和提取图像中的对应形状以达到对图像分析和识别的目的。图像形态学往往用于边界提取、区域填充、连通分量的提取、凸壳、细化、像素化等图像操作。
  8. 图像分割(Image Division) 将一幅图像分解为若干互不交叠区域的过程。
  9. 特征提取(Feature Extraction) 指的是进一步处理之前得到的图像区域和边缘,得到图像的“非图像”的表示或描述,如数值、向量和符号等,提取出来的这些就是特征。有了这些特征我们就可以通过训练过程教会计算机如何懂得这些特征,从而使计算机具有了识别图像的本领。常用的图像特征有纹理特征形状特征空间关系特征等。
  10. 对象识别(Object Recognition &Identification) 一般是指利用前一步从数字图像中提取出的特征向量进行分类和理解的过程,这涉及计算机技术、模式识别、人工智能等多方面的知识。

      经过上述处理步骤,最初的一幅原始的、可能存在干扰和缺损的图像就变成了其他控制算法需要的信息,从而实现了图像理解的最终目的。以上概括了数字图像处理的基本顺序,但不是每个图像处理系统都一定需要进行所有这些步骤。在实际的图像处理系统设计中,我们应当根据实际需要决定采用哪些步骤和模块。

1.3 数字图像处理的预备知识

      数字图像是由一组具有一定的空间位置关系的像素组成的,因而具有一些度量和拓扑性质。理解像素间的关系是学习图像处理的必要准备,这主要包括相邻像素、邻接性、连通性、区域、边界的概念,以及今后要用到的一些常见距离度量方法。

  1. 邻接性
    它是一种相似性的度量,用于确定所需判断邻接性的像素之间的相似程度。
    在这里插入图片描述
  2. 连通性
    像素的连通性(Contiguous):令S代表一幅图像中的像素子集。如果在S中全部像素之间存在一个通路,则可以称2个像素P和Q在S中是连通的。此外,对于S中的任何像素P,S中连通到该像素的像素集叫做S的连通分量。如果S中仅有一个连通分量,则集合S叫做连通集
  3. 区域和边界
    如果R同时是连通集,则称R为一个区域(Region)
    边界(Boundary) 的概念是相对于区域而言的。一个区域的边界(或边缘、轮廓)是区域中所有有一个或多个不在区域R中的邻接像素的像素所组成的集合。而区域的 边缘(Edge) 由具有某些导数值的像素组成,是一个像素及其直接邻域的局部性质,是一个有大小和方向属性的矢量。
    边界和边缘是不同的。边界是和区域有关的全局概念,而边缘表示图像函数的局部性质
  4. 距离度量
    在这里插入图片描述
    即距离等于r的像素形成以P为圆心的圆。
    在这里插入图片描述
    即距离等于r的像素形成以P为中心的菱形。
    在这里插入图片描述
    即距离等于r的像素形成以P为中心的方形。

1.4 基本的图像操作

图像操作按照处理图像的数量分类,可以分为对单幅图像操作(如滤波)和对多幅图像操作(如求和、求差和逻辑运算等);按照参与操作的像素范围的不同,可以分为点运算和邻域运算;而根据操作的数学性质,又可以分为线性操作和非线性操作。

  1. 点运算和邻域运算
    点运算指的是对图像中的每一个像素逐个进行同样的灰度变换运算。设r和s分别是输入图像f(x, y)和输出图像g(x, y)在任一点(x, y)的灰度值,则点运算可以使用下式定义。
    在这里插入图片描述
    如果将点运算扩展,对图像中每一个小范围(邻域)内的像素进行灰度变换运算,即称为邻域运算或邻域滤波。这可以使用下式定义。
    在这里插入图片描述
  2. 线性和非线性操作
    对两幅图像的线性组合应用算子与分别应用算子后的图像在进行同样的线性组合所得到的结果相同,即为线性操作。不符合上述定义的算子即为非线性算子,对应的是非线性图像操作。
    在这里插入图片描述
    滤波中的平均平滑、高斯平滑、梯度锐化等都是线性运算,而中值滤波则是非线性的。

2. MATLAB基础

注释:%
**跨行输入:**方法是在行末使用3个半角圆点
F1 命令打开帮助浏览器
“H1”行: 是M文件中的第一个注释行(即以百分号开始的行),它必须紧跟着函数定义行,中间不能有空行,这一行的百分号前也不能有空白字符或缩进。这一行的内容将在 使用help命令时显示在第一行, 而lookfor命令查找H1行中的指定关键词,并在结果的右侧列显示H1行。
提前分配矩阵内存: 这个技巧与动态内存的使用有关。当分配的动态内存零散无序时,会产生大量内存碎片,进而导致内存分配和回收效率降低。事先分配一块足够大的空间(当然,不是过大)以尽量减少内存碎片的产生。

2.1 常用命令

  1. addpath函数
    addpath函数向path变量中加入指定的目录路径,其原型如下。
    addpath('dir','dir2','dir3' ...'-flag')
    dir、dir2、dir3等为要加入的目录路径,这些变量必须是绝对路径。

  2. genpath函数
    genpath函数生成包含指定目录下所有子目录的路径变量,其原型如下。
    p = genpath('directory');
    参数directory为指定的目录。
    函数返回包含指定目录本身和其全部子目录的数据。

  3. 打开与编辑M文件
    如果需要编辑某个M文件,可以使用open命令和edit命令,它们的调用形式如下。
    open filename
    edit filename
    edit命令只能编辑M文件,而open命令可以使用Windows默认操作打开一系列其他类型的文件。

  4. help命令
    help命令可以用于查看Matlab系统或M文件中内置的在线帮助信息。doc 命令可以用于查看命令或函数的 HTML 帮助,这种帮助信息可以在帮助浏览器窗口中打开。doc命令可提供比help命令更多的信息,还可能包含图片或视频等的多媒体例子,对图像处理工具箱中的函数更是如此。
    help command-name
    doc function-name

  5. lookfor命令
    当忘记命令或函数的完整拼写时,可以使用lookfor命令查找当前目录和自动搜索列表下所有名字中含有所查内容的函数或命令。其调用格式如下。
    lookfor keyword

  6. save函数
    将price、age和number三个变量保存到文件MyData.mat中。save('MyData.mat', 'price', 'age', 'number')

  7. size
    函数可以获得指定数组某一维的大小,可以用来查看图像的高度和宽度以及动态图像的帧数等
    size(A,dim)
    函数ndims可以查看数组的维数。ndims(A)

  8. meshgrid函数
    meshgrid函数用于根据给定的横纵坐标点生成坐标网格,以便计算二元函数的取值,在绘制三维曲面时常常会用到它。
    [X,Y] = meshgrid(x, y)
    X和Y为输出采样点的横坐标矩阵和纵坐标矩阵,X阵和Y阵的元素分别为对应位置点的横坐标和纵坐标。

u = [-10:0.1:10];
v = [-10:0.1:10];
[U,V] = meshgrid(u,v);
H = exp(-(U.^2 + V.^2)./2/3^2);
mesh(u, v, H);

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
默认情况下,Matlab将变量存储为双精度浮点数(double)

2.2 矩阵

在这里插入图片描述
在这里插入图片描述
eye(n)生成N 阶单位阵,zeros(n)生成N阶每个元素均为0的方阵。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

对于图像矩阵,还有一系列Matlab函数可以进行专门针对图像的像素级操作。如图像叠加imadd,图像相减imsubtract等。
在这里插入图片描述
在这里插入图片描述
函数
如果函数有返回值,但调用者没有指定接收返回值的变量,系统会使用默认的ans变量存储返回值。如果函数返回多个值,则ans中只保留第一个返回值。

在这里插入图片描述

2.3 细胞数组和结构体

  1. 细胞数组
    我们常常会遇到不同维度的返回值同时被一个函数返回的情况。细胞数组是Matlab特有的一种数据结构,它的各个元素可以是不同的数据类型。细胞数组可采用下标访问。相当于python的list。
    定义:
    在这里插入图片描述
    在这里插入图片描述
    访问:访问细胞数组{}
    Cell{1} 返回 ans = Harry
    使用圆括号形式的索引可以得到变量的描述
    Cell(3) ans =[2x2 double]
    细胞数组中存储的是建立该对象时所使用的其他对象(矩阵或字符串、数字等)的拷贝,而不是引用或指针,即使其他对象的值被改变,细胞数组中的值也不变

  2. 结构体
    结构体是另一种形式的聚合类型,拥有多个不同类型的字段,通过圆点运算符“.”引用内部字段,字段必须具有独特的名字以便区分。相当于python的字典。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2.4 Matlab图像类型

图像类型要包括亮度图像、RGB图像、索引图像、二值图像和多帧图像。
亮度图像(Intensity Image) 即灰度图像。Matlab 使用二维矩阵存储亮度图像,矩阵中的每个元素直接表示一个像素的亮度(灰度)信息。
RGB图像(RGB Image) 使用3个一组的数据表达每个像素的颜色,即其中的红色、绿色和蓝色分量。在Matlab中,RGB图像被存储在一个m×n×3的三维数组中。对于图像中的每个像素,存储的三个颜色分量合成像素的最终颜色。
索引图像(Indexed Image) 往往包含两个数组:一个图像数据矩阵(Image Matrix)和一个颜色索引表(Colormap)。对应于图像中的每一个像素,图像数据数组都包含一个指向颜色索引表的索引值。
在这里插入图片描述

图像中的每个像素都用整数表示,其含义为颜色索引表中对应颜色的索引。
二值图像(Binary Image) 二值图像中,像素的颜色只有两种可能取值:黑或白,0表示黑色,而1表示白色。
多帧图像(Multiframe Image Array) 对于某些应用,可能要处理多幅按时间或视角方式连续排列的图像,称之为多帧图像(所谓“帧”就是影像动画中最小单位的单幅影像画面)。例如:一个拥有5张连续的400像素×300像素的RGB图像的多帧连续片断的存储方式是一个400×300×3×5的矩阵。
cat函数 cat函数可以在指定维度上连接数组,其调用方式如下。CAT(DIM, A, B)。
图像格式转换函数
图像数据类型转换函数

2.5 图像操作

Matlab可以处理以下的图像文件类型:BMP、HDF、JPEG、PCX、TIFF、XWD、ICO、GIF、CUR。可以使用imread和imwrite函数对图像文件进行读写操作,使用imfinfo函数来获得数字图像的相关信息

  1. imread函数
    imread函数可以将指定位置的图像文件读入工作区。对于除索引图像以外的情况。
    A = imread(FILENAME, FMT)
    FMT 参数指定图像文件的格式所对应的标准扩展名,
    在这里插入图片描述
  2. imwrite函数
    imwrite 将指定的图像数据写入文件中,通过指定不同的保存文件扩展名。
    imwrite(A,FILENAME, FMT);
  3. imfinfo函数
    imfinfo函数可以读取图像文件中的某些属性信息,例如修改日期、大小、格式、高度、宽度、色深、颜色空间、存储方式等。
    imfinfo(FILENAME, FMT);
  4. imshow函数
    imshow 函数用于显示工作区或图像文件中的图像,在显示的同时可控制部分效果,常用的调用形式如下。
    imshow(I, [low high], param1, value1, param2,value2, …)
    可选参数[low high]指定显示灰度图像时的灰度范围,灰度值低于low的像素被显示为黑色,高于high的像素被显示为白色,介于low和high之间的像素被按比例显示为各种等级的灰色。如果将此参数指定为空矩阵[ ],则函数会将图像矩阵中的最小值指定为low,最大值指定为 high,
  5. 多帧显示
load mri%载入Matlab自带的核磁共振图像
imshow(D(:,:,7), map);% 显示多幅中的一幅
% 同一窗口显示
figure, montage(D, map);
% 转化成为电影
figure
mov=immovie(D, map);
%colormap(map);%设定颜色表
movie(mov);%播放电影
  1. 图像的放缩
    输入 zoom on命令即可实现图像的放缩,zoom off可以关闭图像放缩功能。打开图像放缩功能之后,就可以通过简单的鼠标操作观察图像细部了。
  2. 像素值查看工具
    通过输入impixelinfo命令在最后显示的图像窗口的左下角,随鼠标光标的移动显示鼠标指针所指位置处的像素值,还可以通过imdistline命令以交互的方式查看图像中两点之间的距离

3. 图像的点运算

3.1 灰度直方图

      灰度直方图描述了一幅图像的灰度级统计信息,主要应用于图像分割和图像灰度变换等处理过程中。
      图像直方图描述图像的各个灰度级的统计特性,它是图像灰度值的函数,统计一幅图像中各个灰度级出现的次数或概率。有一种特殊的直方图叫做归一化直方图,可以直接反映不同灰度级出现的比率

I=imread('coins.png'); %读入原图像
I = im2double(I);%转换数据类型为double
[M,N]=size(I);%计算图像面积
figure(1);%打开新窗口
imshow(I);%显示原图像
title('原图像');
figure(2);%打开新窗口
imhist(I);
[H,x] = imhist(I, 64);%计算64个小区间的灰度直方图
stem(x, (H/M/N), '.');%绘制归一化直方图
title('histogram');

在这里插入图片描述
一系列灰度直方图上,可以很直观地看出图像的亮度和对比度特征。实际上,直方图的峰值位置说明了图像总体上的亮暗:如果图像较亮,则直方图的峰值出现在直方图的较右部分;如果图像较暗,则直方图的峰值出现在直方图的较左部分,从而造成暗部细节难以分辨。如果直方图中只有中间某一小段非零值,则这张图像的对比度较低;反之,如果直方图的非零值分布很宽而且比较均匀,则图像的对比度较高。

3.2 灰度的线性变换

% 增加对比度
Fa = 2; Fb = -55;
O = Fa .* I + Fb/255;
figure(3);subplot(2,2,1);
imshow(O);title('Fa = 2 Fb = -55 增加对比度');
figure(4);subplot(2,2,1);
[H,x] = imhist(O, 64);
stem(x, (H/M/N), '.');
title('Fa = 2 Fb = -55 增加对比度');
%减小对比度
Fa = 0.5; Fb = -55;
O = Fa .* I + Fb/255;
figure(3);subplot(2,2,2);imshow(O);
title('Fa = 0.5 Fb = -55 减小对比度');
figure(4);subplot(2,2,2);
[H,x] = imhist(O, 64);
stem(x, (H/M/N), '.');
title('Fa = 0.5 Fb = -55 减小对比度');
%线性增加亮度
Fa = 1; Fb = 55;O = Fa .* I + Fb/255;
figure(3);subplot(2,2,3);
imshow(O);title('Fa = 1 Fb = 55 线性平移增加亮度')
figure(4);subplot(2,2,3);
[H,x] = imhist(O, 64);
stem(x, (H/M/N), '.');title('Fa = 1 Fb = 55 线性平移增加亮度');
% 反相显示
Fa = -1; Fb = 255;
O = Fa .* I + Fb/255;
figure(3);subplot(2,2,4);
imshow(O);title('Fa = -1 Fb = 255 反相显示');
figure(4);subplot(2,2,4);
[H,x] = imhist(O, 64);
stem(x, (H/M/N), '.');title('Fa = -1 Fb = 255 反相显示');

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

3.3 灰度的对数变换

对数变换的一般表达式:
在这里插入图片描述
函数自变量低值时,曲线的斜率很高;自变量高值时,曲线斜率变小。
对数函数曲线可知,这种变换可以增强一幅图像中较暗部分的细节,从而可用来扩展被压缩的高值图像中的较暗像素,因此对数变换被广泛地应用于频谱图像的显示中。一个典型的应用是傅立叶频谱,直接显示频谱时,图像显示设备的动态范围往往不能满足要求,从而丢失了大量的暗部细节。而在使用对数变换之后,图像的动态范围被合理地非线性压缩,从而可以清晰地显示。

I=imread('coins.png');%读取图像
F = fft2(im2double(I));%计算频谱
F = fftshift(F);
F = abs(F);
T= log(F + 1);%对数变换
subplot(1,2,1);imshow(F, []);
title('未经变换的频谱');subplot(1,2,2);
imshow(T, []);title('对数变换后');%显示原图和变换结果

在这里插入图片描述

3.4 伽玛变换

伽玛变换又称指数变换或幂次变换,一般表达式如下:
在这里插入图片描述
esp为补偿系数;γ则为伽玛系数。与对数变换不同,伽玛变换可以根据γ的不同取值选择性地增强低灰度区域的对比度或是高灰度区域的对比度。
γ的取值决定了输入图像和输出图像之间的灰度映射方式,即决定了是增强低灰度(阴影区域)还是增强高灰度(高亮区域)。

  • γ>1时,图像的高灰度区域对比度得到增强。
  • γ<1时,图像的低灰度区域对比度得到增强。
  • γ=1时,这一灰度变换是线性的,即不改变原图像。

通常需要将0~255的灰度动态范围首先变换到0~1的动态范围,执行伽玛变换后再恢复原动态范围。
J = imadjust(I, [low_in high_in], [low_out,high_out], gamma);
若high_out小于low_out,则输出图像J的亮度将会反转。

I = imread('pout.tif'); 
%读入原图像% Gamma取0.75
figure(1)
subplot(1,3,1);
imshow(imadjust(I, [ ], [ ], 0.75));
title('Gamma 0.75')
figure(2)
subplot(1,3,1);
imhist(imadjust(I, [ ], [ ], 0.75));
title('Gamma 0.75');
% Gamma取1
figure(1)
subplot(1,3,2);
imshow(imadjust(I, [ ], [ ], 1));
title('Gamma 1');
figure(2)
subplot(1,3,2);
imhist(imadjust(I, [ ], [ ], 1));
title('Gamma 1');
% Gamma取1.5
figure(1)
subplot(1,3,3);
imshow(imadjust(I, [ ], [ ], 1.5));
title('Gamma 1.5');
figure(2)
subplot(1,3,3);
imhist(imadjust(I, [ ], [ ], 1.5));
title('Gamma 1.5');

在这里插入图片描述
看出不同伽玛因子给图像的整体明暗程度带来的变化,以及对图像暗部和亮部细节清晰度的影响。当伽玛因子取1的时候,图像没有任何改变。
在这里插入图片描述注意到直方图非零区间位置的变化,以及这些变化给图像带来的影响,由于伽玛变换并不是线性变换,所以它不仅可以改变图像的对比度,还能够增强细节,从而带来整体图像效果的增强和改善。

3.5 灰度阈值变换

       可以将一幅灰度图像转换成黑白的二值图像。用户指定一个起到分界线作用的灰度值,如果图像中某像素的灰度值小于该灰度值,则将该像素的灰度值设置为0,否则设置为255。这个起到分界线作用的灰度值称为阈值,灰度的阈值变换也常被称为阈值化或二值化。
在这里插入图片描述
可以将图像内容直接划分为我们关心的和不关心的两个部分,从而在复杂背景中直接提取出感兴趣的目标。因此它是图像分割的重要手段之一。
BW = im2bw(I, level)
I为需要二值化的输入图像;level给出了具体的变换阈值。
thresh = graythresh(I)
可以自适应地确定变换所用的“最优”阈值

I = imread('rice.png');
thresh = graythresh(I);
bw1 = im2bw(I, thresh);% 二值化
bw2 = im2bw(I, 130/255);%130为阈值实现二值化,注意要将此阈值转换至[01]区间
subplot(1,3,1);imshow(I);title('原图像');
subplot(1,3,2);imshow(bw1);title('自动选择阈值');
subplot(1,3,3);imshow(bw2);title('阈值130');

在这里插入图片描述
单纯的灰度阈值化无法很好地处理灰度变化较为复杂的图像,常常给物体的边缘带来误差,或者给整个画面带来噪点。这要通过其他的图像处理手段予以弥补。

3.6 分段线性变换

       分段线性变换有很多种,包括灰度拉伸、灰度窗口变换等。
       分段线性变换函数来增强图像对比度的方法实际是增强原图各部分的反差,即增强输入图像中感兴趣的灰度区域,相对抑制那些不感兴趣的灰度区域。分段线性函数的主要优势在于它的形式可任意合成,而其缺点是需要更多的用户输入。
**加粗样式**
分段的灰度拉伸可以更加灵活地控制输出灰度直方图的分布,可以有选择地拉伸某段灰度区间以改善输出图像。如果一幅图像灰度集中在较暗的区域而导致图像偏暗,我们可以用灰度拉伸功能来扩展(斜率>1)物体灰度区间以改善图像;同样,如果图像灰度集中在较亮的区域而导致图像偏亮,也可以用灰度拉伸功能来压缩(斜率<1)物体灰度区间以改善图像质量。

3.7 直方图均衡化

直方图均衡化又称为灰度均衡化,是指通过某种灰度映射使输入图像转换为在每一灰度级上都有近似相同的像素点数的输出图像,是一种实用性极高的直方图修正技术。经过均衡化处理后的图像中,像素将占有尽可能多的灰度级并且分布均匀。因此,这样的图像将具有较高的对比度较大的动态范围

[J, T] = histeq(I)
I是原始图像。J是经过直方图均衡化的输出图像。T是变换矩阵。

%都有近似相同的像素点数的输出图像,分布均匀
%图像易受光照、视角、方位、噪声等的影响。
%图像归一化就是将图像转换成唯一的标准形式以抵抗各种变换,
%从而可消除同类图像不同变形体之间的外观差异。
I = imread('pout.tif'); %读入原图像
I = im2double(I);
% 对于对比度变大的图像
I1 = 2 * I - 55/255;
subplot(4,4,1);imshow(I1);
subplot(4,4,2);imhist(I1);
subplot(4,4,3);imshow(histeq(I1));
subplot(4,4,4);imhist(histeq(I1));
%对于对比度变小的图像
I2 = 0.5 * I + 55/255;
subplot(4,4,5);imshow(I2);
subplot(4,4,6);imhist(I2);
subplot(4,4,7);imshow(histeq(I2));
subplot(4,4,8);imhist(histeq(I2));
% 对于线性增加亮度的图像
I3 = I + 55/255;
subplot(4,4,9);imshow(I3);
subplot(4,4,10);imhist(I3);
subplot(4,4,11);imshow(histeq(I3));
subplot(4,4,12);imhist(histeq(I3));
% 对于线性减小亮度的图像
I4 = I - 55/255;
subplot(4,4,13);imshow(I4);
subplot(4,4,14);imhist(I4);
subplot(4,4,15);imshow(histeq(I4));
subplot(4,4,16);imhist(histeq(I4));

在这里插入图片描述
将直方图均衡化算法应用于左侧的亮度、对比度不同的各个图像后,得到了右侧直方图大致相同的图像,这体现了直方图均衡化作为强大自适应性的增强工具的作用。原始图像的直方图不同而图像结构性内容相同时,直方图均衡化所得到的结果在视觉上几乎是完全一致的

3.8 直方图规定化

直方图均衡化算法可以自动确定灰度变换函数,主要用于增强动态范围偏小的图像对比度,丰富图像的灰度级。但有时希望可以对变换过程加以控制,如能够人为地修正直方图的形状,或者说是获得具有指定直方图的输出图像。这种用于产生具有特定直方图的图像的方法叫做直方图规定化,或直方图匹配。
[J, T] = histeq(I, hgram)
函数会将原始图像I处理成一幅以用户指定向量hgram作为直方图的图像。

I = imread('pout.tif');%读入原图像
I1 = imread('coins.png');%读入要匹配直方图的图像
I2 = imread('circuit.tif');%读入要匹配直方图的图像
%计算直方图
[hgram1, x] = imhist(I1);
[hgram2, x] = imhist(I2);
%执行直方图均衡化
J1=histeq(I,hgram1);
J2=histeq
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值