【图像处理】彩色直方图均衡

2023-11-02

sourcePic=imread('D:\Images\pic_loc\1870358810205041517.jpg');
[m,n,o]=size(sourcePic);
grayPic=rgb2gray(sourcePic);
figure,imshow(sourcePic);
figure,imshow(grayPic);
 
gp=zeros(1,256); %计算各灰度出现的概率
for i=1:256
	gp(i)=length(find(grayPic==(i-1)))/(m*n);
end
figure,bar(0:255,gp);
title('原图像直方图');
xlabel('灰度值');
ylabel('出现概率');
 
newGp=zeros(1,256); %计算新的各灰度出现的概率
S1=zeros(1,256);
S2=zeros(1,256);
tmp=0;
for i=1:256
	tmp=tmp+gp(i);
	S1(i)=tmp;
	S2(i)=round(S1(i)*256);
end
for i=1:256
	newGp(i)=sum(gp(find(S2==i)));
end
figure,bar(0:255,newGp);
title('均衡化后的直方图');
xlabel('灰度值');
ylabel('出现概率');
 
newGrayPic=grayPic; %填充各像素点新的灰度值
for i=1:256
	newGrayPic(find(grayPic==(i-1)))=S2(i);
end
figure,imshow(newGrayPic);

结果:




当然,有时候我们不禁想得到一幅图的灰度直方图均衡化结果,而是希望得到彩色图均衡化结果,那么就需要先将彩色图分为RGB分量,代码如下:

sourcePic=imread('D:\Images\pic_loc\1870358810205041517.jpg');
[m,n,o]=size(sourcePic);
figure,imshow(sourcePic,[]);
%grayPic=rgb2gray(sourcePic);
grayPic=sourcePic(:,:,1);
 
gp=zeros(1,256); %计算各灰度出现的概率
for i=1:256
	gp(i)=length(find(grayPic==(i-1)))/(m*n);
end
 
newGp=zeros(1,256); %计算新的各灰度出现的概率
S1=zeros(1,256);
S2=zeros(1,256);
tmp=0;
for i=1:256
	tmp=tmp+gp(i);
	S1(i)=tmp;
	S2(i)=round(S1(i)*256);
end
for i=1:256
	newGp(i)=sum(gp(find(S2==i)));
end
 
newGrayPic=grayPic; %填充各像素点新的灰度值
for i=1:256
	newGrayPic(find(grayPic==(i-1)))=S2(i);
end
nr=newGrayPic;
 
 
grayPic=sourcePic(:,:,2);
 
gp=zeros(1,256); %计算各灰度出现的概率
for i=1:256
	gp(i)=length(find(grayPic==(i-1)))/(m*n);
end
 
newGp=zeros(1,256); %计算新的各灰度出现的概率
S1=zeros(1,256);
S2=zeros(1,256);
tmp=0;
for i=1:256
	tmp=tmp+gp(i);
	S1(i)=tmp;
	S2(i)=round(S1(i)*256);
end
for i=1:256
	newGp(i)=sum(gp(find(S2==i)));
end
 
newGrayPic=grayPic; %填充各像素点新的灰度值
for i=1:256
	newGrayPic(find(grayPic==(i-1)))=S2(i);
end
ng=newGrayPic;
 
 
 
grayPic=sourcePic(:,:,3);
 
gp=zeros(1,256); %计算各灰度出现的概率
for i=1:256
	gp(i)=length(find(grayPic==(i-1)))/(m*n);
end
 
newGp=zeros(1,256); %计算新的各灰度出现的概率
S1=zeros(1,256);
S2=zeros(1,256);
tmp=0;
for i=1:256
	tmp=tmp+gp(i);
	S1(i)=tmp;
	S2(i)=round(S1(i)*256);
end
for i=1:256
	newGp(i)=sum(gp(find(S2==i)));
end
 
newGrayPic=grayPic; %填充各像素点新的灰度值
for i=1:256
	newGrayPic(find(grayPic==(i-1)))=S2(i);
end
nb=newGrayPic;
 
 
res=cat(3,nr,ng,nb);
figure,imshow(res,[]);

结果:


从原博客评论看,博主的方法是有问题的,不应该在RGB分开均衡,而应该在HSV上执行,否则存在严重的失真。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【图像处理】彩色直方图均衡 的相关文章

  • 【图像处理】Hough直线变换

    I 直线篇 1 直线是如何表示的 对于平面中的一条直线 在笛卡尔坐标系中 常见的有点斜式 两点式两种表示方法 然而在hough变换中 考虑的是另外一种表示方式 使用 r theta 来表示一条直线 其中r为该直线到原点的距离 theta为该
  • 【C++笔记】OpenCV图像Mat格式转换为QT中QImage并显示zai Qlabel上

    Mat rgb QImage imgGray img if imgGray channels 1 imgGray img QImage const unsigned char imgGray data imgGray cols imgGra
  • OpenCV 陷波滤波器消除周期性噪音 C++

    观察下面图像 有明显的近似水平线的噪音模式 我们希望他在频率域内的成分沿垂直轴集中 下图是该图像的谱 将垂直轴的分量去掉 构建的陷波器如下 原图与结果图对比 滤掉的空间噪音模式 代码实现 include opencv2 opencv hpp
  • 高斯低通频率域滤波

    基本原理 频率域滤波 即将原图像通过傅里叶变换 转换至频率域 在频率域利用该域特有的性质进行处理 再通过傅里叶反变换把处理后的图像返回至空间域 所以 频率域的操作是在图像的傅里叶变换上执行 而不是在图像本身上执行 高斯低通滤波器传递函数表达
  • 数字图像处理——图像的点运算

    图像的点运算 一 灰度直方图 imhist 二 灰度线性变换 imadjust 三 灰度非线性变换 1 灰度对数变换 log 2 灰度幂次变换 3 灰度指数变换 exp 四 灰度阈值变换 im2bw 五 灰度拉伸 六 灰度均衡 histeq
  • 深度学习数据集处理(一)获取公开数据集

    深度学习数据集处理系列 深度学习数据集处理 二 数据集划分训练集 测试集 深度学习数据集处理 三 将自己数据集制作为TFrecords 本文介绍一些常用的深度学习关于图像处理方面的常用公开数据集的下载链接 以及数据集的简单介绍 MNIST数
  • 【图像处理】彩色直方图均衡

    sourcePic imread D Images pic loc 1870358810205041517 jpg m n o size sourcePic grayPic rgb2gray sourcePic figure imshow
  • 数字图像处理第一二章

    什么是数字图像处理 数字图像处理是指借助于数 计算机来处理数字图像 当x y和灰度值f是有限的离散数值时 称该图像为数字图像 一幅图像可定义为一个二维函数f x y 其中x和y是空间 平面 坐标 而在任一对空间坐标 x y 处的幅值f称为图
  • 计算二维离散随机变量的联合概率分布

    一 定义 Joint probability distribution 给定至少两个随机变量X Y 它们的联合概率分布 Joint probability distribution 指的是每一个随机变量的值落入特定范围或者离散点集合内的概率
  • [Android] 通过Menu实现图片怀旧、浮雕、模糊、光照和素描效果

    由于随手拍项目想做成类似于美图秀秀那种底部有一排Menu实现不同效果的功能 这里先简单介绍如何通过Menu实现打开相册中的图片 怀旧效果 浮雕效果 光照效果和素描效果 后面可能会讲述如何通过PopupWindow实现自定义的Menu效果 希
  • 图象恢复——(逆滤波,维纳滤波)

    目的 对获取图像在频域用高斯函数进行退化并叠加白噪声 对退化图像进行逆滤波和维纳滤波恢复 比较原始图像和恢复图像 对利用逆滤波和维纳滤波恢复方法恢复图像进行比较 一 基本原理 图像复原是一种客观的操作 通过使用退化现象的先验知识重建或恢复一
  • 《数字图像处理》学习总结及感悟:第二章数字图像基础(2)电磁波、传感器及辐射成像原理

    前往老猿Python博文目录 https blog csdn net LaoYuanPython 一 引言 本系列文章记录老猿自学冈萨雷斯 数字图像处理 的感悟和总结 不过估计更新会比较慢 白天要工作 都是晚上抽空学习 学习完一章再回头总结
  • 【数字图像处理】七.MFC图像增强之图像普通平滑、高斯平滑、Laplacian、Sobel、Prewitt锐化详解

    本文主要讲述基于VC 6 0 MFC图像处理的应用知识 主要结合自己大三所学课程 数字图像处理 及课件进行讲解 主要通过MFC单文档视图实现显示BMP图像增强处理 包括图像普通平滑 高斯平滑 不同算子的图像锐化知识 希望该篇文章对你有所帮助
  • 数字图像处理(冈萨雷斯 第三版)

    1 1 图像与图像处理的概念 图像 Image 使用各种观测系统以不同形式和手段观测客观世界而获得的 可以直接或间接作用于人眼并进而产生视觉的实体 包括 各类图片 如普通照片 X光片 遥感图片 各类光学图像 如电影 电视画面 客观世界在人们
  • 基于python的数字图像处理--学习笔记(三)

    基于python的数字图像处理 学习笔记 三 前言 一 灰度拉伸 二 幂律 伽马 变换 三 对数变换 前言 进入冈萨雷斯的第三章内容 并用python实现功能 我更改了代码源 之前找到太烂了 代码全是错 现在使用的代码很清晰 功能也很全 一
  • 【图像处理】去雾算法

    真正了解了什么叫最简单的就是最美好的 真正的好文章不需要大堆公式堆积显得充实 而是最最平实的思想 这篇文章的 原文PDF PPT 感兴趣的可以了解一下 这篇文章的目的就是以最简单的思路将图像达到去雾效果 用Matlab编了一下 效果图特别好
  • 图像均值、标准差、变异系数的意义

    目录 均值图像如何算 方差图像如何计算 变异系数是什么 极差 最大值 最小值 方差 数列中每个元素与均值之差的平方和 标准差 方差的开平方根 变异系数 正态分布 标准差 平均值 数字图像处理的配套视频教程 1 冈萨雷斯 数字图像处理 开始安
  • 数字图像处理——图像锐化

    图像增强是图像处理的一个重要环节 早期的图像处理就是从图像增强开始的 人们研究对质量低的图像进行处理以获得改善质量后的图像 现今的图像增强还为后续的图像处理 如图像信息提取 图像识别等 提供更高识别度的图像 从图像处理技术来看 图像的摄取
  • 【图像处理】图像二值化----otsu(最大类间方差法、大津算法)

    转载 https blog csdn net abcjennifer article details 6671288 最大类间方差法是由日本学者大津于1979年提出的 是一种自适应的阈值确定的方法 又叫大津法 简称OTSU 它是按图像的灰度
  • 基于PCA的人脸识别(MATLAB)

    项目描述 采用数据库为剑桥大学ORL人脸数据库 包含40个人的400张人脸图像 每人对应10张 图像为92x112灰度图像 256灰度级 对于每个人的10张图像 随机选择7张用来训练 另外3张用于测试 采用2范数最小匹配 对每个人的另外3张

随机推荐

  • js的函数的逻辑中断

    逻辑中断也称短路运算 指的是在包含多个表达式的逻辑判断从左往右执行时 当左边的表达式可以确定结果时 就不再对右边的表达式进行逻辑判断 逻辑中断 逻辑中断 1 表达式1 表达式2 表达式1为真 返回表达式1 表达式1为假 返回表达式2 2 表
  • 华为hg532e设置虚拟服务器,华为hg532e设置虚拟服务器

    华为hg532e设置虚拟服务器 内容精选 换一换 本节操作介绍华为云上云服务器的跨账号跨区域迁移 建议采用镜像迁移方式 服务器迁移的常见场景与常用的迁移方式请参考迁移的背景知识 跨账号跨区域迁移的方法请参考方案介绍常见的服务器迁移场景包括物
  • OPEN3D(python)学习笔记-1.4 点云裁剪

    官方文档链接 http www open3d org docs release 示例代码 用read selection polygon volume读取指定的多边形区域的json文件 import open3d as o3d import
  • 阿里云服务器使用过程小记

    实验室服务器升级 之前一直免费托管在学校实验室 最近开始往阿里云上面迁移 先从阿里云服务器ECS入手 以下是在实验过程中的一些记录 记录下来便于后期管理 一 前端设备数据接入 一 最普遍的使用是采用DTU透传 DTU配置的目标IP即为ECS
  • appium从安装到运行,控制真机+模拟器,安卓自动化

    1 jdk 8u152 windows x64 exe 下载地址 JAVA环境变量 https www oracle com cn java technologies oracle java archive downloads html 系
  • pnpm install报错

    原因是npm版本过高 降低版本可成功install 以下是nvm管理node版本常用的一些命令 方便多个项目切换node版本
  • 对英文字母和数字的组合分别排序,并计算相同字母后的数字和

    import java io BufferedReader import java io FileReader import java util Map import java util TreeMap public class PaiXv
  • Struts2 框架验证

    一 对于输入校验struts2提供了两种实现方法 1 采用手工编写代码实现 2 基于XML配置方式实现 注意 配置验证文件ActionName alias validation xml 常用 使用基于XML配置方式实现输入校验时 Actio
  • 第三方(网页/小程序)唤醒微信app小结

    第三方 网页 小程序 唤醒微信app小结 在实际业务中 要在第三方网页或者小程序实现唤醒微信app 其实很简单 贴代码 a href a 或者 window location href weixin 或者 window location r
  • python execjs库_python3调用js的库之execjs

    执行JS的类库 execjs PyV8 selenium node 这里主要讲一下execjs 一个比较好用且容易上手的类库 支持py2 与py3 支持 JS runtime url https pypi org project PyExe
  • 如何设置管道为非阻塞

    LINUX中 管道的读写两端是阻塞的 例如读端会一直阻塞直到写端写入内容 才会立即返回 其实也可以将管道中的读或写端设置为非阻塞状态 如果要设置读端或者写端为非阻塞 参考以下三个步骤 int flags fcntl fd 0 F GETFL
  • 盒子模型(详)

    定义 每一个标签都是一个矩形 像一个盒子 所以HTML页面的布局可以理解为多个盒子组合嵌套排列而成 盒模型由里到外包括四个部分 内容部分 padding 内边距 border 边框 margin 外边距 内容部分一般用来显示图像或文字 在标
  • SpringCloud - Spring Cloud Netflix 之 Hystrix熔断器(七)

    阅读本文前可先参考 SpringCloud Spring Cloud根 父项目 开发准备 二 MinggeQingchun的博客 CSDN博客 在微服务架构中 一个应用往往由多个服务组成 这些服务之间相互依赖 依赖关系错综复杂 通常情况下
  • Python注册器register初使用

    创建三个文件 register py import importlib import logging MODEL MODULES models ALL MODULES model MODEL MODULES def import all m
  • beef-xss

    下载使用 apt get install beef xss apt get update beef xss 使用beef xss命令打开后 默认打开一个浏览器登录页面 初次使用需要修改密码 example处修改为本机IP 在DVWA进行测试
  • 基于Java+SSM项目的计算机毕业设计-电器网上订购系统项目实战(附论文+源码)

    大家好 我是职场程序猿 感谢您阅读本文 欢迎一键三连哦 当前专栏 Java毕业设计 精彩专栏推荐 安卓app毕业设计 微信小程序毕业设计 演示视频 ssm003电器网上订购系统演示 转 标准 源码下载地址 https download cs
  • 利用过滤器实现 论坛或留言板 上内容转义

    注意此方法只能解决getParameter 方法取得参数转义 若要彻底解决getParameterMap 和getParameterValues 方法取得参数的转义 则需要使用 关于Filter 覆盖getParameterMap 来实现功
  • react hooks中为useState添加回调函数(自定义hooks)

    react hooks默认是不支持useState的回调的 但有时候因为异步问题 不能及时获取到修改后的值 所以我们可以自定义回调函数 1 先自定义函数 function useCallbackState od const cbRef us
  • Xilinx FPGA BRAM IP核:实现高效内存管理

    Xilinx FPGA BRAM IP核 实现高效内存管理 在FPGA项目中 内存资源是非常有限的 而BRAM Block RAM 是其中一种高速内存解决方案 Xilinx FPGA提供了BRAM IP核 用于实现高效的内存管理 本文将介绍
  • 【图像处理】彩色直方图均衡

    sourcePic imread D Images pic loc 1870358810205041517 jpg m n o size sourcePic grayPic rgb2gray sourcePic figure imshow