第3章 灰度变换与空间滤波(1)

3.1 简介
空间域指的是图像平面本身,这类方法是以对图像像素直接处理为基础的。本章主要讨论两种空间域处理方法:亮度(灰度)变换与空间滤波。后一种方法有时涉及到邻域处理或空间卷积。
本章讨论的空间域处理由下列表达式表示:

\[g(x,y)=T[f(x,y)]
\]

其中,\(f(x,y)\)为输入图像,\(g(x,y)\)为输出图像, \(T\)是对图像\(f\)的算子,作用于点\((x,y)\)定义的邻域。此外,\(T\)还可以对一组图像进行处理,例如为了降低噪声而叠加\(K\)幅图像。
为了定义点\((x,y)\)的空间邻域,主要方法是利用一块中心位于\((x,y)\)的正方形或矩形区域。此区域的中心由起始点开始逐个像素移动,比如从左上角,在移动的同时包含不同的邻域。算子\(T\)作用于每个位置\((x,y)\),从而得到相应位置的输出图像\(g\)。只有中心点在\((x,y)\)处的邻域内的像素被用来计算\((x,y)\)处\(g\)的值。
3.2 灰度变换函数
变换函数\(T\)的最简单形式是邻域大小为1*1(单个像素)的情况。在此情况下,在\((x,y)\)处,\(g\)的值仅由\(f\)在这一点处的灰度决定,\(T\)也就成为亮度或灰度变换函数。当处理单色(也就是灰度)图像时,这两个术语是可以相互换用的。当处理彩色图像时,亮度用来表示在特定色彩空间里的彩色图像成分。
由于输出值仅取决于点的灰度值,而不是取决于点的邻域,因此灰度变换函数通常写成:$$s=T(r)$$其中,\(r\)表示图像\(f\)的灰度,\(s\)表示\(g\)的灰度。两者在图像中处于相同的坐标\((x,y)\)处。
3.2.1 imadjust和stretchlim函数
imadjust函数是针对灰度图像进行灰度变换的基本图像处理工具箱函数,一般的语法格式为:
g=imadjust(f,[low_in high_in],[low_out high_out],gamma)

如上图所示,此函数将\(f\)的灰度值映射到\(g\)中的新值,将low_in与high_in之间的值映射到low_out和high_out之间。low_in以下与high_in以上的值被截去。其实就是将 low_in以下的值映射为low_out;将high_in以上的值映射为high_out。输入图像应属于uint8、uint16或double类。输出图像应和输入图像属于同一类。对于函数imadjust来说,所有输入中除了图像\(f\)和gamma,不论\(f\)属于什么类,都将输入值限定在0和1之间。例如,如果\(f\)属于uint8类,imadjust函数将乘以255来决定应用中的实际值。利用空矩阵([])得到[low_in high_in]或[low_out high_out],将导致结果默认为[0 1]。如果high_out小于low_out,输出灰度将反转。
参数gamma指明了由\(f\)映射生成图像\(g\)时曲线的形状。如果gamma的值小于1,映射被加权至较高的输出值,如图3.2a。如果gamma的值大于1,映射加权至较低的输出值,如图3.2c。如果省略函数参量,gamma默认为1(线性映射)
案例3.1 使用imadjust函数
f=imread('Fig0203(a).tif');
g1=imadjust(f,[0 1],[1 0]);
g2=imadjust(f,[0.5 0.75],[0 1]);
g3=imadjust(f,[],[],2);
g4=imadjust(f,stretchlim(f),[]);
g5=imadjust(f,stretchlim(f),[1 0]);
subplot(231);imshow(f);xlabel('(a)');
subplot(232);imshow(g1);xlabel('(b)');
subplot(233);imshow(g2);xlabel('(c)');
subplot(234);imshow(g3);xlabel('(d)');
subplot(235);imshow(g4);xlabel('(e)');
subplot(236);imshow(g5);xlabel('(f)');

上图中,(a)是一幅数字乳房X射线图像f,显示出一处病灶;(b)是负片图像,可以通过下列命令得到:
g1=imadjust(f,[0 1],[1 0]);
获得照片负片图像的这一过程对于增强在一大片主要的黑色区域中嵌入白色及灰色细节是非常有用的,图(b)非常容易分析胸部的组织,图像的负片也可以使用工具箱函数imcomplement得到: g=imcomplement(f);图(c)是下列命令得到的结果:
g2=imadjust(f,[0.5 0.75],[0 1]);
此命令是将0.5到0.75之间的灰度扩展到[0,1]整个范围。这种类型的处理对于处理强调图像中感兴趣的灰度区非常有用;最后利用:
g3=imadjust(f,[],[],2);
通过压缩灰度图像的低端和扩展高端,得到类似于图(d)的结果;有时能够用imadjust函数自动地而不必关心上面讨论的低高参数的处理。stretchlim函数在这个方面非常有用,基本语法如下:
Low_high=stretchlim(f)
其中,Low_high是低和高均受限的两元素向量,可用于完成对比度拉伸。默认情况下,Low_high的值指定灰度图像f中所有像素值底部和顶部饱和度的1%。结果以向量[low_in high_in]的形式应用于imadjust函数:
g4=imadjust(f,stretchlim(f),[]);
图(e)显示了上述命令得到的结果,观察对比度的提升。与此类似,使用如下命令得到图(f):
g5=imadjust(f,stretchlim(f),[1 0]);
可以看到,增强了负片图像的对比度。
stretchlim函数的通用语法如下:
Low_high=stretchlim(f,tol)
其中,tol是两元素向量[low_frac high_frac],指定了图像低和高像素值饱和度的百分比。
如果tol是标量,那么low_fac=tol,并且high_frac=1-low_frac;饱和度等于低像素值和高像素值的百分比。如果在参数中忽略tol,那么饱和度水平为2%,tol的默认值为[0.01 0.99]。如果选择tol=0,那么Low_high=[min(f(

数字图像处理的Matlab实现(3)—灰度变换与空间滤波的更多相关文章

  1. 基于小波变换的数字图像处理(MATLAB源代码)

    基于小波变换的数字图像处理(MATLAB源代码) clear all; close all; clc;M=256;%原图像长度N=64; %水印长度[filename1,pathname]=uiget ...

  2. 《数字图像处理(MATLAB)》冈萨雷斯

    <数字图像处理(MATLAB)>冈萨雷斯 未完结! 参考:数字图像处理——https://blog.csdn.net/dujing2019/article/category/8820151 ...

  3. 数字图像处理的Matlab实现(4)—灰度变换与空间滤波

    第3章 灰度变换与空间滤波(2) 3.3 直方图处理与函数绘图 基于从图像亮度直方图中提取的信息的亮度变换函数,在诸如增强.压缩.分割.描述等方面的图像处理中扮演着基础性的角色.本节的重点在于获取.绘 ...

  4. 数字图像处理的Matlab实现(1)—绪论

    第1章 绪论 1.1 什么是数字图像处理 一幅图像可以定义为一个二维函数\(f(x,y)\),这里的\(x\)和\(y\)是空间坐标,而在任意坐标\((x,y)\)处的幅度\(f\)被称为这一坐标位置 ...

  5. 数字图像处理的Matlab实现(2)—MATLAB基础

    第2章 MATLAB编程基础 2.1 M-文件 MATLAB中的M-文件可以是简单执行一系列MATLAB语句的源文件,也可以是接收自变量并产生一个或多个输出的函数. M-文件由文本编辑器创建,并以fi ...

  6. c语言数字图像处理(四):灰度变换

    灰度变换 灰度变换函数 s = T(r)   其中r为输入图像在(x, y)点处的灰度值,s为输出图像在(x, y)点处的灰度值 灰度变换的作用 上图所示的两幅T(s)函数的图像曲线,第一幅图可以增强 ...

  7. 经典数字图像处理(matlab 实现)

    Ivan Selesnick(Software) Sparsity / Total variation / Denoising Software - Michael Elad's Personal P ...

  8. 读书笔记之 数字图像处理的MATLAB实现(第2版)

  9. 数字图像处理(MATLAB版)学习笔记(2)——第2章 灰度变换与空间滤波

    0.小叙闲言 1.本章整体结构 2.书中例子 例2.1 主要是使用函数imadjust,来熟悉一下灰度处理,体验一把 >> imread('myimage.jpg'); >> ...

随机推荐

  1. CodeForces992E 二分 + 树状数组(线段树)

    http://codeforces.com/problemset/problem/992/E 题意:给定一个序列 ai​ ,记其前缀和序列为 si​ ,有 q 个询问,每次单点修改,询问是否存在一个  ...

  2. javascript实现全选,全不选,反选

    利用input的checked属性来实现:checked值为true,表示被选择,否则反之. 效果如图: js代码: <script> var butt1 = document.getEl ...

  3. 剑指Offer_编程题_7

    题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项. n<=39 class Solution { public: int Fibonacci(int n) ...

  4. maven_问题

    问题:was cached in the local repository, resolution will not be reattempted until the update interval ...

  5. java io系列26之 RandomAccessFile

    本文主要介绍 RandomAccessFile. 转载请注明出处:http://www.cnblogs.com/skywang12345/p/io_26.html 更多内容请参考:java io系列0 ...

  6. Linux记录-salt命令

    salt '*id*'  test.ping salt -N  组名  cmd.run '' salt -G "ipv4:0.0.0.0"  cmd.run '' salt '*i ...

  7. Hadoop记录-HDFS balancer配置

    HDFS balancer配置(可通过CM配置)dfs.datanode.balance.max.concurrent.moves 并行移动的block数量,默认5 dfs.datanode.bala ...

  8. Java基础高级部分(一)

    1. 集合部分 1.1 HashMap排序 package cn.Douzi.hashMap01; import java.util.ArrayList; import java.util.Colle ...

  9. 上传文件服务与web服务分离

    业务场景:1. 后端服务为java web应用,使用tomcat容器,多实例集群化部署.2. 前端使用nginx作为后端应用的反向代理. 业务需求:现在需要在java web应用端上传文件,同时还要能 ...

  10. 开源框架.netCore DncZeus学习(三)增加一个菜单

    框架运行起来了,先尝试增加一个菜单. 本节增加一个菜单名字:公司管理,需要注意一点,所有的name都要保持一致,注意圈中部分.为了防止手敲代码出错,建议复制已有的代代码进行修改(比如这里用的Role页 ...