第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函数是针对灰度图像进行灰度变换的基本图像处理工具箱函数,一般的语法格式为:
  1. 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函数
  1. f=imread('Fig0203(a).tif');
  2. g1=imadjust(f,[0 1],[1 0]);
  3. g2=imadjust(f,[0.5 0.75],[0 1]);
  4. g3=imadjust(f,[],[],2);
  5. g4=imadjust(f,stretchlim(f),[]);
  6. g5=imadjust(f,stretchlim(f),[1 0]);
  7. subplot(231);imshow(f);xlabel('(a)');
  8. subplot(232);imshow(g1);xlabel('(b)');
  9. subplot(233);imshow(g2);xlabel('(c)');
  10. subplot(234);imshow(g3);xlabel('(d)');
  11. subplot(235);imshow(g4);xlabel('(e)');
  12. subplot(236);imshow(g5);xlabel('(f)');

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

    import QtQuick 2.9 import QtQuick.Window 2.2 import QtQuick.Controls 2.2 Window { visible: true widt ...

  2. 转载:C++ 二维数组new

    来源:http://developer.51cto.com/art/201002/183127.htm C++编程语言中有一种叫做new的二维数组,它的应用方式比较灵活,可以有多种方法来帮助我们实现一 ...

  3. 信用评分卡 (part 5 of 7)

    python信用评分卡(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId=1005214003&utm_camp ...

  4. Kafka权威指南 读书笔记之(五)深入Kafka

    集中讨论以下3 个有意思的话题 :• Kafka 如何进行复制:• Kafka 如何处理来自生产者和消费者的请求 :• Kafka 的存储细节,比如文件格式和索引. 集群成员关系 Kafka 使用 Z ...

  5. Can't read swagger JSON from http://localhost:8080/Test/api-docs

    新手入坑Swagger,搜了下网上博客,各种整合费时费力.弄出来竟然报错: Can't read swagger JSON from http://localhost:8080/Test/api-do ...

  6. Maccms8.x 命令执行漏洞分析

    下载链接https://share.weiyun.com/23802397ed25681ad45c112bf34cc6db 首先打开Index.php $m = be('get','m'); m参数获 ...

  7. oracle java连接配置

    oracle数据库连接使用ojdbc驱动.使用tomcat-jdbc连接池. pom.xml: <!-- tomcat jdbc --> <dependency> <gr ...

  8. 五.HashTable原理及实现学习总结

    有两个类都提供了一个多种用途的hashTable机制,他们都可以将可以key和value结合起来构成键值对通过put(key,value)方法保存起来,然后通过get(key)方法获取相对应的valu ...

  9. 三十六、Linux 线程——线程基本概念及线程的创建和终止

    36.1 线程介绍 36.1.1 线程的基本概念 进程是资源管理的最小单位,线程是程序执行的最小单位 每个进程都有自己的数据段.代码段和堆栈段. 线程通常叫做轻型的进程,它包含独立的栈和 CPU 寄存 ...

  10. Linux centos 防火墙篇

    防火墙的关闭 service iptables stop 永久关闭 chkconfug iptables off 查看状态 service iptables status