matlab 直方图均衡化、规定化 ,线性灰度级变换实现图像增强
一、实验目的
1、熟悉基于基于单像素空域增强方法
2、理解并掌握直方图均衡化和规定化实现图像增强
二、实验环境
Matlab
三、实验内容
(一)、题目
1、对一幅低对比度分辨率的图像采用除直方图处理方法之外的灰度级变换方法实现图像增强。
2、对一幅低对比度分辨率的图像采用直方图均衡化和规定化方法(单映射或组映射)实现图像增强,分别采用系统函数和自己编写函数实现相应用功能。
(二)、相关知识
1、灰度级变换方法
灰度变换是基于点操作的增强方法,它将每一个像素的灰度值按照一定的数学变换公式转换为一个新的灰度值,如增强处理中的对比度增强。对比度增强可以采用线性拉伸和非线性拉伸。
线性拉伸可以将原始输入图像中的灰度值不加区别地扩展。如果要求对局部扩展拉伸某一范围的灰度值,或对不同范围的灰度值进行不同的拉伸处理时,采用分段线性拉伸。非线性拉伸常采用对数扩展和指数扩展。对数扩展拉伸低亮度区,压缩高亮度区;指数扩展拉伸了高亮区,压缩了低亮度区。
灰度变换函数描述了输入灰度值和输出灰度值之间变换关系,一旦灰度变换函数确定下来了,那么其输出的灰度值也就确定了。用于图像灰度变换的函数主要有以下三种:线性函数、对数函数和幂律函数。
2、线性变换原理解释
图像的灰度集中在较亮的区域而导致图像偏亮,这个时候可以对图像的每一个像素灰度作线性拉伸。
原图像f(i,j)的灰度范围为[a,b],线性变换后图像g(i,j)的范围为[a1,b1],关系式为:g( i , j ) = a1 + ( b1 - a1)/( b - a )*[ f( i ,j ) - a ]
3、直方图均衡化
直方图均衡化是通过灰度变换将一幅图像转换为另一幅具有均衡直方图的图像,即在每个灰度级上都具有相同的象素点数的过程。处理后的图像直方图分布更均匀,图像在每个灰度级上都有像素点。从处理前后的图像可以看出,许多在原始图像中看不清楚的细节在直方图均衡化处理后所得到的图像中都变得十分清晰。
均衡化:建立映射表s,再根据映射表对各个像素进行映射变换。
4、规定化方法
直方图规定化就是通过一个灰度映像函数,将原灰度直方图改造成所希望的直方图,其关键是灰度映像函数。
5、系统自带函数
imhist(f):画出直方图函数,参数为要处理的图像
histeq(f):直方图均衡化函数,参数为要处理的图像
histeq(f,g2):直方图规定化函数,第一个参数为要处理的图像,第二个参数可为目标直方图或灰度级个数
(三)、代码
线性变化以及直方图均衡化和规定化系统函数调用 源文件
close all;clear all;clc;%获取灰度图像的直方图
I=imread('girl.jpg');
row=size(I,1); %图像的行
col=size(I,2); %图像的列
N=zeros(1,256); %创建1行256列的零矩阵
for i=1:rowfor j=1:colk=I(i,j);N(k+1)=N(k+1)+1; %统计各个灰度值的像素数 灰度值范围0-255end
end
figure,
subplot(221),imshow(I);title("原图像");
subplot(222),bar(N);title("原图像直方图"); %绘制直方图
axis tight; %设置坐标轴%利用直方图增强图像
%图像的灰度值主要集中在150-255之间,需要将小于150的灰度值设置为0
%原图像的灰度值设为x,增强图像的灰度值设为y,(x-150)/(255-x)=(y-0)/(255-y),化简得y=255(x-150)/105%调整灰度图像的灰度范围去增强图像
%I=imread('girl.jpg');
I=double(I);
J=(I-150)*255/105; %具体调整方案
% row=size(I,1); %图像的行
% col=size(I,2); %图像的列
for i=1:rowfor j=1:colif(J(i,j)<0) %灰度小于0像素的直接赋值为0J(i,j)=0;endif J(i,j)>255; %计算后,灰度大于255的像素直接赋值为最大的255J(i,j)=255;endend
end
figure;
subplot(221),imshow(uint8(I));title("原图像");%原图 显示时,修改图像的数据格式为uint8类型
subplot(222),imhist(uint8(I));title("原图像直方图");%查看灰度直方图
subplot(223),imshow(uint8(J));title("线性变换增强图像"); %显示线性增强结果图像 显示时,修改图像的数据格式为uint8类型
subplot(224),imhist(uint8(J));title("线性变换增强图像直方图");%查看灰度直方图%线性变换
%I= imread('girl.jpg');
a1 = 0;
b1 = 255;%线性变换后的范围
a = 150;
b = 255;%原图像范围
A1 = a1+(b1-a1)/(b-a)*(I-a);
for i=1:rowfor j=1:colif(A1(i,j)<0) %灰度小于0像素的直接赋值为0A1(i,j)=0;endif A1(i,j)>255; %计算后,灰度大于255的像素直接赋值为最大的255A1(i,j)=255;endend
end
figure;
subplot(221),imshow(uint8(I));title("原图像");%原图
subplot(222),imhist(uint8(I));title("原图像直方图");%查看灰度直方图
subplot(223),imshow(uint8(A1));title("线性变换增强图像"); %显示线性增强结果图像 显示时,修改图像的数据格式为uint8类型
subplot(224),imhist(uint8(A1));title("线性变换增强图像直方图");%查看灰度直方图I=imread('girl.jpg');
%直方图均衡化:将原图像的直方图通过变换函数修正为均匀的直方图,然后按均衡直方图修改原图像。
A2 = histeq(I,64);%histeq(),第一个参数为要处理的图像,第二个参数为处理后的灰度级个数。
%直方图规定化:使原图像灰度直方图变成规定形状的直方图来对图像作修正,直方图均衡化是直方图规定化的一个特例。
h=0:255;
h=1-h/255;%目标直方图
A3 = histeq(I,h);figure;
subplot(321),imshow(uint8(I));title("原图像");%原图
subplot(322),imhist(uint8(I));title("原图像直方图");%查看直方图
subplot(323),imshow(A2);title("直方图均衡化系统函数增强图像"); %显示线性增强结果图像
subplot(324),imhist(A2);title("直方图均衡化系统函数增强图像直方图");%查看直方图
subplot(325),imshow(A3);title("直方图规定化系统函数增强图像"); %显示线性增强结果图像
subplot(326),imhist(A3);title("直方图规定化系统函数增强图像直方图");%查看直方图figure;imhist(h);title("规定化系统函数 被匹配的直方图");%被匹配的直方图图像显示
自己编写函数实现直方图均衡化和规定化(匹配)
f=imread('girl.jpg');
f1=imread('tree.jpg');
%f=rgb2gray(f);
%f1=rgb2gray(f1);
g1=imhist(f);%画出直方图
g2=imhist(f1);%均衡化
[M,N]=size(f);%返回数组每一维的大小
pr=g1/M/N;
s=[];
s2=0;
L=size(pr);
for i=1:L %映射规则s1=(L-1)*pr(i);s2=s2+s1;s=[s;s2];
end
s=s(:,1);f_1=zeros(size(f));%zeros(n)产生n×n的全0方阵%for i=1:M*N %映射图像
for i=1:M %映射图像for j =1:Nf_1(i,j)=s(f(i,j)+1)-1;end
end
figure;
subplot(2,2,1);imshow(f);title('原图像');
subplot(2,2,2);imhist(f);title('原图像直方图');
subplot(2,2,3);imshow(uint8(f_1));title('均衡化图像');
subplot(2,2,4);imhist(uint8(f_1));title('均衡化图像直方图');%规定化
[M1,N1,R]=size(f1); %匹配图像均衡化
pr1=g2/M1/N1;
s_1=[];
s2=0;
L=size(pr1,1);
for i=1:L %映射规则s1=(L-1)*pr1(i);s2=s2+s1;s_1=[s_1;s2];
end
s_1=s_1(:,1);
f_11=zeros(size(f1));for i=1:M1*N1*R %被均衡化的匹配图像if(f1(i)==0)f_11(i)=s_1(1);elsef_11(i)=s_1(f1(i));end
end
figure
subplot(2,2,1);imshow(f1);title('匹配图像');
subplot(2,2,2);imhist(f1);title('匹配图像直方图');
subplot(2,2,3);imshow(uint8(f_11));title('均衡化图像');
subplot(2,2,4);imhist(uint8(f_11));title('均衡化图像直方图');[M1,N1]=size(f1); %规定化(映射)
s=uint8(round(s)); %四舍五入取整,原图像映射表
s_1=uint8(round(s_1));%匹配图像映射表
s_2=zeros([L,1]); %最终映射表
j=1;
for i=1:L %求最终映射表a=find(s_1==s(i));if(a)if((i>2)&&(a(j)==s_2(i))) %if((i>1)&&(a(j)==s_2(i-1)))j=j+1;if (j>=length(a))j=length(a);endelsej=1;endb=a(j);elseb=zhidao_nearest(double(s_1),s(i));end s_2(i)=b;
endf_2=zeros(size(f)); %像素通过映射表匹配
% for i=1:M*N
% f_2(i)=s_2(f(i));
% end
for i=1:M %映射图像for j =1:Nf_2(i,j)=s_2(f(i,j)+1)-1;end
endfigure
subplot(2,3,1);imhist(f);title('原图像直方图');
subplot(2,3,2);imhist(f1);title('匹配图像直方图');
subplot(2,3,3);imhist(uint8(f_2));title('匹配后图像直方图');
subplot(2,3,4);imshow(f);title('原图像');
subplot(2,3,5);imshow(f1);title('匹配图像');
subplot(2,3,6);imshow(uint8(f_2));title('匹配后图像');function y=zhidao_nearest(A,b) %查最接近数的下标
[Asort,index]=sort(abs(A(:)-double(b)));
y=A(index(1));
end
(四)、实验结果
1、采用线性变换方法实现图像增强结果(图1)
图1 线性变化结果
2、采用系统函数直方图均衡化和规定化方法(单映射或组映射)实现图像增强。
图2 系统函数处理结果
图3 直方图规定化目标直方图
3、利用直方图均衡化和规定化方法自己编写函数实现图像增强。
图4 原图均衡化处理结果
图5 匹配图像均衡化处理结果
图6 自己编写函数图像增强处理结果
matlab 直方图均衡化、规定化 ,线性灰度级变换实现图像增强相关推荐
- 图像细节增强(直方图均衡化,对数变换,Gamma变换(校正))
图像细节增强(直方图均衡化,对数变换,Gamma变换(校正)) 文章目录 一.直方图均衡化 1.定义 2.原理 3.方法步骤 二.对数变换 1.原理 三.Gamma校正 1.原理 # 前言 重新梳理图 ...
- 图像增强算法汇总(直方图均衡化、拉普拉斯、Log变换、gamma伽马变换)附MATLAB代码
一.图像增强算法介绍 图像增强算法常见于对图像的亮度.对比度.饱和度.色调等进行调节,增加其清晰度,减少噪点等.图像增强往往经过多个算法的组合,完成上述功能,比如图像去燥等同于低通滤波器,增加清晰度则 ...
- histeq从用法到原理——Matlab直方图均衡化函数
转载于http://blog.sina.com.cn/s/blog_14d1511ee0102wwyt.html (公式未正常显示,请看原文链接) 一.用法 histeq是Matlab中的一个工具箱函 ...
- matlab 直方图均衡化 histeq实现
function img = histEq(img) % 输入图像灰度.rgb图像都可以 % 1 转灰度图像 2. 统计每一灰度级的数量 3. 累计灰度级 4. 归一化为累计概率 % 5. 当前灰度级 ...
- 直方图均衡化(Histogram equalization)与直方图规定化
心血来潮,想写一写直方图均衡化.我先说说为什么要写直方图均衡化,因为之前接触到理论上的面试,看起来很简单的知识点,其实暗藏着很多的玄机(-_-).本文尽量尝试着去推导.推导之前写一下基本的原理. 关注 ...
- matlab 增加图像对比度_计算机视觉学习笔记6 图像直方图与直方图均衡化
图像的直方图 图像直方图表示图像中每一种像素的个数,反映了图像中每种像素值出现的频率,是图像的基本统计特征之一,具有平移,旋转,缩放不变性,广泛应用于图像处理的各个领域.比如灰度图像的阈值分割,基于颜 ...
- 彩色图直方图均衡化matlab
直方图均衡化 简介 直方图是图像中像素强度分布的图形表达方式.它统计了每一个强度值所具有的像素个数.直方图均衡化是通过拉伸像素强度分布范围来增强图像对比度的一种方法.是图像处理领域中利用图像直方图对对 ...
- 【数字图像处理】图像直方图均衡化、空域滤波(均值滤波、中值滤波)、图像锐化(Laplace算子)、图像傅里叶变换实验
图像直方图均衡化.空域滤波.图像锐化.图像傅里叶变换 一.图像直方图均衡化 二.图像空域滤波 1.均值滤波(滤波次数n→3) 2.中值滤波(滤波次数n→3) 3.图像锐化(Laplace算子) 三.图 ...
- 【OpenCV 例程200篇】46. 直方图均衡化
[OpenCV 例程200篇]46. 直方图均衡化 欢迎关注 『OpenCV 例程200篇』 系列,持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 图像直方图是反映图 ...
- 数图实验1直方图均衡化c语言,直方图均衡化
直方图均衡化Tag内容描述: 1.直方图均衡化的matlab实现 海南大学课程论文课程名称:数字图像处理 题目名称:直方图均衡化的matlab实现 学 院:信息科学技术学院 专业班级:2010级计算机 ...
最新文章
- 面试官问你MyBatis SQL是如何执行的?把这篇文章甩给他
- formal timetable for cambridge
- maven(二)pom文件详解
- python接口自动化测试框架unittest代码_Python+unittest+requests 接口自动化测试框架搭建教程...
- 用GD32替代STM32,是什么体验?
- Java常用设计模式————工厂模式
- 【数字图像处理】求图像rice.png中米粒个数
- 1个月时间整理了2019年上千道Java面试题,近500页文档!
- 快速行进算法(fast_marching_kroon)的matlab代码
- 重新启动计算机的方法有,电脑重新启动怎么办 重新启动解决方法介绍【详解】...
- iOS之某公司iOS开发笔试题
- Ubuntu18.04安装网络调试助手 NetAssist
- 传输线模型及方程推导
- 我眼中的嵌入式是这样的!
- Office2010打开多个excel文件时,开多个excel而不是同一个切换
- Git-远程仓库【转】
- invalid byte sequence for encoding utf8 0xcb 0xef
- 《袁老师访谈录》第一期|吴恩柏教授/香港科大协理副校长:【成功,说到底要非常专注!】...
- 一种万能解锁的解决方法
- AirDisk产品S3和Q3C的区别