直方图规定化原理及matlab实现代码
一、基本原理
直方图均衡化能够得到具有均匀直方图的图像,对于某些应用,采用均匀直方图的基本增强并不是最好的方法。我们往往需要将直方图变换为某种特定的形状,以实现对原图像进行有目的地增强。
进行直方图规定化,需要指定规定化处理后的图像的直方图。在本算法中,使用一幅标准图像的直方图作为规定的直方图。理想情况下,规定化处理后的图像的直方图应当与标准图像的直方图相同,但实际上这两者并不完全相同,只是比较接近。
二、实现步骤
(1)对原图像,计算用于直方图均衡化的变换函数,对sks_ksk进行四舍五入
(2)对标准图像,计算用于直方图均衡化的变换函数,对zqz_qzq进行四舍五入
(3)对每一个值sks_ksk (k=0,1,2,…,2n2^n2n-1),寻找与它最接近的zqz_qzq,并存储这些从k到q的映射,将原图像中灰度级为k的像素点的值更改为q,即可得到直方图规定化后的图像。要注意的是,当从k到q的映射不唯一时,选择最小的q值。
三、效果演示
(1)原图像、标准图像和规定化图像;
(2)原图像、标准图像和规定化图像的归一化直方图;
四、matlab实现代码
%% 直方图规定化
clear,close all
srcImg = imread('直方图规定化用原图像.tif');
h = figure(1);
size = get(0,'ScreenSize');
set(h,'position',size)
subplot(331);imshow(srcImg);title('原图像','fontsize',18);
stdImg = imread('直方图规定化用标准图像.tif');
subplot(334);imshow(stdImg);title('标准图像','fontsize',18);
src_p = histogram(srcImg);% 计算原图像的归一化直方图
subplot(332);bar(0:255,src_p);axis([0,255,0,max(src_p)*1.2]);title('原图像的归一化直方图','fontsize',18);
src_s = cum(src_p);% 计算原图像的累积归一化直方图
subplot(333);bar(0:255,src_s);axis([0,255,0,max(src_s)*1.2]);title('原图像的累积归一化直方图','fontsize',18);
src_s = uint8(src_s*255);
std_p = histogram(stdImg);% 计算标准图像的归一化直方图
subplot(335);bar(0:255,std_p);axis([0,255,0,max(std_p)*1.2]);title('标准图像的归一化直方图','fontsize',18);
std_s = cum(std_p);% 计算标准图像的累积归一化直方图
subplot(336);bar(0:255,std_s);axis([0,255,0,max(std_s)*1.2]);title('标准图像的累积归一化直方图','fontsize',18);
std_s = uint8(std_s*255);
q = zeros(1,256);
for k = 0:255temp = src_s(k+1)-std_s;temp = abs(temp);[~,q(k+1)] = min(temp);
end
dstImg = transform(srcImg,q);
dstImg = uint8(dstImg);
subplot(337);imshow(dstImg);title('规定化图像','fontsize',18);
dst_p = histogram(dstImg);% 计算规定化图像的归一化直方图
subplot(338);bar(0:255,dst_p);axis([0,255,0,max(dst_p)*1.2]);title('规定化图像的归一化直方图','fontsize',18);
dst_s = cum(dst_p);% 计算规定化图像的累积归一化直方图
subplot(339);bar(0:255,dst_s);axis([0,255,0,max(dst_s)*1.2]);title('规定化图像的累积归一化直方图','fontsize',18);
%% 函数定义:计算图像的归一化直方图
function p = histogram(srcImg)[rows,cols] = size(srcImg);h = zeros(1,256);for k = 0:255bw = (srcImg==k);h(k+1) = sum(bw(:));endp = h/(rows*cols);
end
%% 函数定义:计算图像的累积归一化直方图
function s = cum(p)s = zeros(1,256);for i = 1:256if (1==i)s(i)=p(1);continue;ends(i) = s(i-1)+p(i);end
end
%% 函数定义:灰度级映射
function dstImg = transform(srcImg,s)[rows,cols] = size(srcImg);dstImg = zeros(rows,cols);for k = 0:255bw = (srcImg==k);dstImg(bw) = s(k+1);end
end
直方图规定化原理及matlab实现代码相关推荐
- 二值图填充原理 matlab,图像Ostu二值化原理及matlab实现代码
Ostu假设图像是由前景区域和背景区域两部分组成的,通过遍历计算不同阈值(通常为[0 255]区间范围内)下分割结果中前景区域和背景区域的灰度直方图,然后比较两者之间的方差,使得方差最大化的那个灰度阈 ...
- Sobel算子原理及matlab实现代码
一.基本原理 Sobel算子使用梯度进行边缘增强,它考虑图像3×3邻域的处理. 对于图像f(x,y),取该图像的3×3的区域,如下图 x方向的偏微分定义为: y方向的偏微分定义为: 则梯度幅值为: S ...
- 中值滤波原理及matlab实现代码
一.基本原理 上述均值滤波虽然可以降低噪声,但是也会导致图像模糊.而中值滤波在一定条件下可以克服线性滤波带来的图像细节模糊的问题,它对处理椒盐噪声非常有效. 中值滤波通常采用一个含有奇数个点的滑动窗口 ...
- 均值滤波原理及matlab实现代码
一.基本原理 噪声点像素的灰度与其邻域内像素的灰度显著不同,根据噪声点的这一特性,可以使用邻域均值滤波来降低噪声. 利用一个大小为m×n的模板对一幅大小为M×N的图像进行均值滤波可以表示为如下公式,其 ...
- DBSCAN原理及matlab仿真代码
本文原理转自 https://www.cnblogs.com/pinard/p/6208966.html DBSCAN(Density-Based Spatial Clustering of Ap ...
- 直方图规定化(直方图匹配)
在介绍直方图规定化之前,先介绍一下统计直方图和累积直方图.参考自:http://blog.csdn.net/tkp2014/article/details/40151515 对颜色特征的表达方式有许多 ...
- 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果。
图像二值化的目的是最大限度的将图象中感兴趣的部分保留下来,在很多情况下,也是进行图像分析.特征提取与模式识别之前的必要的图像预处理过程.这个看似简单的问题,在过去的四十年里受到国内外学者的广泛关注,产 ...
- 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果(转)
源:十三种基于直方图的图像全局二值化算法原理.实现.代码及效果.
- 十三种基于直方图的图像全局二值化算法原理、实现、代码及效果
十三种基于直方图的图像全局二值化算法实现 1. 什么是基于直方图的图像全局二值化算法 2. 灰度平均值 3. 百分比阈值(P-Tile法) 3. 基于双峰的阈值 3.1 基于平均值的阈值 3.2 基于 ...
最新文章
- setTimeout 第一个参数类型
- 设计模式笔记(2)---单件模式(创建型)
- 姚班系创业公司宸镜科技再获新融资,漆子超、陈启峰联手,OPPO入股加持“元宇宙”概念要火?...
- CentOS进不了mysql
- 优质 Spring Boot 在线教育平台 源码 免费分享
- Dapr 客户端 搭配 WebApiClientCore 玩耍服务调用
- array_column php什么版本可以用,array_column兼容php5.5以下版本
- 除了ssh外也可以开启telnet服务连接服务器
- 【python】过长代码换行续行方法
- python dll文件丢失_python34.dll
- 线性查找法java代码_Java线性查找和二分查找
- Ansible(三)编写ansible的playbook文件(实现端口更改、远程主机信息采集、负载均衡)
- cm10主题android l,索爱MK16i刷机包[Nightly 2013.03.18 CM10] Cyanogen团队定制
- eclipse项目的导入
- Cknife与一句话木马提权
- 快速学习JasperReport-模板工具Jaspersoft Studio
- 怎么样才算软件做得好?
- 如何在iPad上使用VScode
- 庆祝自己喜提ROG冰刃3新锐!
- 计算机关闭应用窗口的方法,电脑怎么从后台关闭程序应用