灰度变换增强
2015-08-22 16:30
274 查看
空域内的图像增强就是调整图像的明暗对比度,对每个像素的灰度值直接处理,一般来说包括灰度变换增强和直方图增强。下面谈谈,灰度变换增强
一、直方图
先了解直方图,即统计每个像素出现的次数,下面的代码可以实现直方图
当然,Matlab图像处理工具箱提供了直接处理图像直方图的函数imhist,直接调用就可以,但是该函数只能画灰度图,实现彩色图像,可以这样进行:
再利用imhist函数,分别画出各分量的直方图;
二、灰度变换增强
1、线性灰度变换
从直方图中,我们可以了解到图像的灰度值主要的集中范围,通常如果图像的灰度值充满整个灰度级,则图像的对比度较好,如果只在某个小区间,则效果不好,因此,需要调整。比如,我们先得到一副的直方图,该图的灰度值主要集中范围是80-150,下面设Y为0-255之间的灰度值,X为80-150之间的灰度值,则满足如下公式:
那么,我们就可以得到相应的映射函数
代码实现灰度值调整
当然,matlab也自带了调整对比度的函数imadjust,这是一种线性变换,输入图像为double,uint8,uint16,输入与输出图像有着相同的类,默认值均为[0 1],matlab中几种调用方式为:
比如
2、分段线性变换
有时为了突出感兴趣的目标或者灰度区间,通常是扩大感兴趣的灰度范围,抑制不感兴趣的目标或者灰度区间
3、非线性灰度变换
非线性变换常见的的有对数变换,和指数变换;对数变换主要应用于动态范围的压缩,能扩展图像低灰度区域,同时压缩高灰度区域,试图像分布均匀,其公式为g=a*log(1+f),a是一个参数
部分参考:MATLAB图像处理实例详解(杨丹编),清华大学出版社
一、直方图
先了解直方图,即统计每个像素出现的次数,下面的代码可以实现直方图
close all; clear; clc; I=imread('images.jpg'); I=rgb2gray(I); [m,n]=size(I); z=zeros(1,256); for i=1:m for j=1:n k=I(i,j);%每个灰度值 z(k+1)=z(k+1)+1;%索引从1开始,所以是k+1 end end bar(z); figure,imshow(z)
当然,Matlab图像处理工具箱提供了直接处理图像直方图的函数imhist,直接调用就可以,但是该函数只能画灰度图,实现彩色图像,可以这样进行:
R=I(:,:,1); G=I(:,:,2); B=I(:,:,3);
再利用imhist函数,分别画出各分量的直方图;
二、灰度变换增强
1、线性灰度变换
从直方图中,我们可以了解到图像的灰度值主要的集中范围,通常如果图像的灰度值充满整个灰度级,则图像的对比度较好,如果只在某个小区间,则效果不好,因此,需要调整。比如,我们先得到一副的直方图,该图的灰度值主要集中范围是80-150,下面设Y为0-255之间的灰度值,X为80-150之间的灰度值,则满足如下公式:
(x-80)/(150-x)=(y-0)/(255-y)
那么,我们就可以得到相应的映射函数
y=255(x-80)/70
代码实现灰度值调整
I1=double(I); J=(I1-80)*255/70; for n=1:row for m=1:column if J(i,j)<0 J(i,j)=0; end if J(i,j)>255 J(i,j)=255; end end end figure, imshow(uint8(J))
当然,matlab也自带了调整对比度的函数imadjust,这是一种线性变换,输入图像为double,uint8,uint16,输入与输出图像有着相同的类,默认值均为[0 1],matlab中几种调用方式为:
%J = IMADJUST(I) %J = IMADJUST(I,[LOW_IN; HIGH_IN],[LOW_OUT; HIGH_OUT]) %J = IMADJUST(I,[LOW_IN; HIGH_IN],[LOW_OUT;HIGH_OUT],GAMMA) %RGB2 = IMADJUST(RGB1,...)
比如
这J1=imadjust(I,[0.2,0.5],[0,1]),该函数意思是将灰度值小于255*0.2的灰度值设为0,将灰度值大于255*0.5的灰度值设为255,而在255*0.2—255*0.5之间的值映射到0-255;其中有种GAMMA变换的调用方式,GAMMA大于1,变暗,小于1,变明亮;此外,该函数还支持彩色图像;利用该函数时最好配合stretchlim函数使用,stretchlim能得到最佳的输入区间,然后通过imadjust调整灰度
2、分段线性变换
有时为了突出感兴趣的目标或者灰度区间,通常是扩大感兴趣的灰度范围,抑制不感兴趣的目标或者灰度区间
非线性变换常见的的有对数变换,和指数变换;对数变换主要应用于动态范围的压缩,能扩展图像低灰度区域,同时压缩高灰度区域,试图像分布均匀,其公式为g=a*log(1+f),a是一个参数
f=imread('1.jpg'); g=mat2gray(log(1+double(f)))%mat2gray将值限定在[0 1]内 imshow(g)
部分参考:MATLAB图像处理实例详解(杨丹编),清华大学出版社
相关文章推荐
- iOS-万能跳转界面方法 (runtime实用篇一) 字数733 阅读1080 评论28 喜欢51
- 控制台传入字符串用逗号隔开,判断是否是回文
- LeetCode2.1.5(Median of Two Sorted Arrays)
- 算法实现的复杂度计算
- 洛谷1023 税收与补贴问题 解题报告
- poj 2488 A Knight's Journey 【骑士周游 dfs + 记忆路径】
- 基本套接字编程
- HDU 1028 Ignatius and the Princess III
- leveldb学习:Env
- POJ 1584 A Round Peg in a Ground Hole(是否凸包 && 圆是否在凸包内)
- 线程入门(一)
- java并发编程---synchronized、Lock
- 第七集 最优间隔分类器问题
- 第七集 最优间隔分类器问题
- 字典序模版
- hdu 1561 The more, The Better 背包型树形DP 简单题
- 信号槽操作案例
- PIL安装
- Wolf and Rabbit(hdu 1222)
- 架构设计:负载均衡层设计方案(5)——LVS单节点安装