当前位置: 首页 > news >正文

计算机视觉全系列实战教程:(八)图像变换-点运算、灰度变换、直方图变换

图像变换:点运算、灰度变换、直方图变换

  • 1.点运算
    • (1)What
    • (2)Why
  • 2.灰度变换
    • (1)What
    • (2)Why(作用)
    • (3)Which(有哪些灰度变换)
  • 3.直方图修正
    • (1)直方图均衡化

1.点运算

(1)What

通过点运算,输出图像的每个像素的灰度值仅仅取决于输入图像中相对应像素的灰度值。

(2)Why

点运算的作用:实现图像增强的常用方法之一

2.灰度变换

(1)What

灰度变换是一种点运算的具体形式,换句话说,灰度变换是点运算的一种运用

(2)Why(作用)

增强对比度,是增强图像的重要手段(途径)和方法

  • 改善图像的质量:显示更多细节,进行对比度拉伸
  • 突出感兴趣的特征:针对图像中感兴趣的区域进行突出或抑制

(3)Which(有哪些灰度变换)

核心:灰度变换函数的不同

  • A.线性灰度变换
    y = k * f(x) + b
    当k>1:对比度将增大
    当k<1:对比度将减小
    当k=1,b!=0:图像整体变亮或变暗
    当k=-1,b=255:图像灰度正好相反
    当k<0,b>0:暗区域变亮,亮区域变暗
  • B.分段线性灰度变换

在这里插入图片描述
确定分段函数的三个k值和b值即可实现分段灰度变换效果。
分段线性灰度变换的效果对参数的选取依赖很高,当参数选取不好的时候,不但无法实现增强图像的效果,还可能变得更加糟糕。为此实现自适应选取成为分段线性灰度变换的关键。目前常用的方法有:自适应最小误差法多尺度逼近方法
恒增强率方法等。

  • C.非线性变换-对数变换
    g(x) = c * log(1+f(x))
  • D.非线性变换-反对数变换
    g(x) = ( (f(x)+1)^r -1 ) / f(x)
  • E.非线性变换-幂律变换
    g(x) = c*f(x)^alpha

3.直方图修正

(1)直方图均衡化

直方图均衡化可实现图像的自动增强,但效果不易控制,得到的是全局增强的结果
  • step01:统计每一个灰度级的数量
// 统计输入图像的灰度级数量
std::vector<int> vNk(256, 0);
int iTotal = imDst.total();
for (int i = 0; i < imDst.total(); ++i)
{vNk[imDst.data[i]]++;
}
  • step02:求累积分布
// 求累积分布函数
for (int i = 1; i < 256; ++i)
{vNk[i] = vNk[i] + vNk[i - 1];
}
  • step03:建立映射关系
// 确定映射关系
std::vector<double> vMPk(256, 0.0);
for (int i = 0; i < 256; ++i)
{vMPk[i] = 255.0f * (double)vNk[i] / iTotal;
}
// 重新赋值实现均衡化
for (int i = 0; i < iTotal; ++i)
{imDst.data[i] = vMPk[imDst.data[i]];
}

代码汇总如下(可直接使用):

/* 图像均衡化 */
int ImgEqualize(const cv::Mat& imSrc, cv::Mat& imDst) {// 对输入的数据进行可靠性判定if (imSrc.empty()) return -1;// 对输入图像进行灰度化处理if (imSrc.channels() == 3)cv::cvtColor(imSrc, imDst, cv::COLOR_RGB2GRAY);else imDst = imSrc;// 统计输入图像的灰度级数量std::vector<int> vNk(256, 0);int iTotal = imDst.total();for (int i = 0; i < imDst.total(); ++i){vNk[imDst.data[i]]++;}// 求累积分布函数for (int i = 1; i < 256; ++i){vNk[i] = vNk[i] + vNk[i - 1];}// 确定映射关系std::vector<double> vMPk(256, 0.0);for (int i = 0; i < 256; ++i){vMPk[i] = 255.0f * (double)vNk[i] / iTotal;}// 重新赋值实现均衡化for (int i = 0; i < iTotal; ++i){imDst.data[i] = vMPk[imDst.data[i]];}}

相关文章:

计算机视觉全系列实战教程:(八)图像变换-点运算、灰度变换、直方图变换

图像变换&#xff1a;点运算、灰度变换、直方图变换 1.点运算(1)What(2)Why 2.灰度变换(1)What(2)Why(作用)(3)Which(有哪些灰度变换&#xff09; 3.直方图修正(1)直方图均衡化 1.点运算 (1)What 通过点运算&#xff0c;输出图像的每个像素的灰度值仅仅取决于输入图像中相对应…...

4.MongoDB sharding Cluster 分片集群

MongoDB分片集群的介绍&#xff1a; 是MongoDB提供的一种可水平扩展的数据存储解决方案。 当单个MongoDB服务器无法满足数据存储需求或吞吐量要求时&#xff0c;可以使用分片集群来分散数据量和查询负载。分片集群的结构组成&#xff1a; 1.分片&#xff08;shards&#xff09;…...

PDF转图片工具

背景&#xff1a; 今天有个朋友找我&#xff1a;“我有个文件需要更改&#xff0c;但是文档是PDF的&#xff0c;需要你帮我改下内容&#xff0c;你是搞软件的&#xff0c;这个对你应该是轻车熟路了吧&#xff0c;帮我弄弄吧”&#xff0c;听到这话我本想反驳&#xff0c;我是开…...

Day 19:419. 甲板上的战舰

Leetcode 419. 甲板上的战舰 给你一个大小为 m x n 的矩阵 board 表示甲板&#xff0c;其中&#xff0c;每个单元格可以是一艘战舰 ‘X’ 或者是一个空位 ‘.’ &#xff0c;返回在甲板 board 上放置的 战舰 的数量。 战舰 只能水平或者垂直放置在 board 上。换句话说&#xff…...

Web前端专科实习:技能提升、实践挑战与职业展望

Web前端专科实习&#xff1a;技能提升、实践挑战与职业展望 在数字化时代&#xff0c;Web前端技术作为连接用户与互联网世界的桥梁&#xff0c;其重要性日益凸显。作为一名Web前端专科实习生&#xff0c;我有幸在这个充满机遇和挑战的领域进行实践学习。接下来&#xff0c;我将…...

简单脉冲动画效果实现

简单脉冲动画效果实现 效果展示 CSS 知识点 CSS 变量的灵活使用CSS 动画使用 页面整体结构实现 <div class"pulse"><span style"--i: 1"></span><span style"--i: 2"></span><span style"--i: 3"…...

apache poi 插入“下一页分节符”并设置下一节纸张横向的一种方法

一、需求描述 我们知道&#xff0c;有时在word中需要同时存在不同的节&#xff0c;部分页面需要竖向、部分页面需要横向。本文就是用java调用apache poi来实现用代码生成上述效果。下图是本文实现的效果&#xff0c;供各位看官查阅&#xff0c;本文以一篇课文为例&#xff0c;…...

【React】useCallback和useMemo使用指南

useCallback和useMemo是React中两个用于优化性能的Hooks。以下是它们的使用指南,分点表示并归纳了关键信息: useCallback useCallback返回一个记忆化的回调函数,该回调函数只在它的依赖项发生改变时才会更新。这对于在组件渲染之间保持稳定的引用特别有用,可以防止不必要…...

XMind软件下载-详细安装教程视频

​简介 XMind是一款实用的思维导图软件&#xff0c;简单易用、美观、功能强大&#xff0c;拥有高效的可视化思维模式&#xff0c;具备可扩展、跨平台、稳定性和性能&#xff0c;真正帮助用户提高生产率&#xff0c;促进有效沟通及协作。中文官方网站&#xff1a;http://www.x…...

一个小的画布Canvas页面,记录点的轨迹

Hello大家好&#xff0c;好久没有更新了&#xff0c;最近在忙一些其他的事&#xff0c;今天说一下画布canvas&#xff0c;下面是我的代码&#xff0c;实现了一个点从画布的&#xff08;0,0&#xff09;到&#xff08;canvas.width&#xff0c;canvas.height&#xff09;的一个实…...

docker-compose教程

1. docker-compose是什么&#xff1f; 1. 1 简介 compose、machine 和 swarm 是docker 原生提供的三大编排工具。 简称docker三剑客。Compose 项目是 Docker 官方的开源项目&#xff0c;定义和运行多个 Docker 容器的应用&#xff08;Defining and running multi-container Do…...

结果出乎意料!MySQL和MariaDB谁快?MySQL 8.0比MySQL 5.6快吗?

MySQL和MariaDB哪个更快&#xff1f;MySQL 8.0的版本和早期MySQL 5.6的版本哪个更快&#xff1f;这儿有个第三方的测试报告回答了这两个大家关心的问题&#xff0c;姚远来和大家一起解读一下。https://smalldatum.blogspot.com/2024/04/sysbench-on-small-server-mariadb-and.h…...

Alienware外星人X17R2 原装Win11系统镜像下载 带SupportAssist OS Recovery一键恢复

装后恢复到您开箱的体验界面&#xff0c;包括所有原机所有驱动AWCC、Mydell、office、mcafee等所有预装软件。 最适合您电脑的系统&#xff0c;经厂家手调试最佳状态&#xff0c;性能与功耗直接拉满&#xff0c;体验最原汁原味的系统。 原厂系统下载网址&#xff1a;http://w…...

【NI国产替代】高速数据采集模块,最大采样率为 125 Msps,支持 FPGA 定制化

• 双通道高精度数据采集 • 支持 FPGA 定制化 • 双通道高精度采样率 最大采样率为 125 Msps12 位 ADC 分辨率 最大输入电压为 0.9 V -3 dB 带宽为 30 MHz 支持 FPGA 定制化 根据需求编程实现特定功能和性能通过定制 FPGA 实现硬件加速&#xff0c;提高系统的运算速度FPGA…...

【网络安全的神秘世界】2024.6.6 Docker镜像停服?解决最近Docker镜像无法拉取问题

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 解决Docker镜像无法拉取问题 &#x1f64b;‍♂️问题描述 常用镜像站&#xff1a;阿里云、科大、南大、上交等&#xff0c;全部挂掉 执行docker pull命…...

【Python入门与进阶】1基本输入和输出

基本输入输出 1.等号赋值 1.1 基本赋值 number_110number_1 1.2 多个赋值 number_2number_3number_420 number_2 number_3 number_4 1.3 多重赋值 number_5,number_6,number_730,35,40 number_5 number_6 number_7 1.4 下划线赋值 _50 _ 2.命名规则 注意&#xff1a…...

CTF Show MISC做题笔记

MISCX 30 题目压缩包为misc2.rar,其中包含三个文件:misc1.zip, flag.txt, hint.txt。其中后两个文件是加密的。 先解压出misc1.zip, 发现其中包含两个文件&#xff1a;misc.png和music.doc。其中后面文件是加密的。 解压出misc.png,发现图片尾部有消息&#xff1a;flag{flag…...

【QT5】<总览二> QT信号槽、对象树及常用函数

文章目录 前言 一、QT信号与槽 1. 信号槽连接模型 2. 信号槽介绍 3. 自定义信号槽 二、QT的对象树 三、添加资源文件 四、样式表的使用 五、QSS文件的使用 六、常用函数与宏 前言 承接【QT5】&#xff1c;总览一&#xff1e; QT环境搭建、快捷键及编程规范。若存在版…...

Button按钮类

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 按钮是GUI界面中应用最为广泛的控件&#xff0c;它常用于捕获用户生成的单击事件&#xff0c;其最明显的用途是触发绑定到一个处理函数。 wxPython类…...

代码随想录-二叉树 | 111 二叉树的最小深度

代码随想录-二叉树 | 111 二叉树的最小深度 LeetCode 111 二叉树的最小深度解题思路代码难点总结 LeetCode 111 二叉树的最小深度 题目链接 代码随想录 题目描述 给定一个二叉树&#xff0c;找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说…...

量子振荡与拓扑输运调控:从实验测量到主动驾驭

1. 项目概述&#xff1a;从“驾驭”一词说起“如何在量子振荡中驾驭拓扑量子输运&#xff1f;”——当我第一次看到这个问题时&#xff0c;脑海里浮现的不是复杂的公式&#xff0c;而是一个更形象的画面&#xff1a;你驾驶着一艘小船&#xff0c;航行在一片由无数微小漩涡&…...

Zynq MPSoC实战:从官方Base TRD里,只抠出HDMI输入+DP显示这一个功能(Vivado 2020.1 + Petalinux)

Zynq MPSoC实战&#xff1a;精准剥离HDMI输入与DP显示功能的工程精简指南 面对Xilinx官方提供的Base TRD参考设计&#xff0c;许多开发者都会被其庞大的规模所震撼——12000行代码、数十个功能模块交织在一起&#xff0c;就像一个功能齐全但臃肿不堪的"瑞士军刀"。本…...

LunaTranslator:打破语言壁垒,让视觉小说触手可及

LunaTranslator&#xff1a;打破语言壁垒&#xff0c;让视觉小说触手可及 【免费下载链接】LunaTranslator 视觉小说翻译器 / Visual Novel Translator 项目地址: https://gitcode.com/GitHub_Trending/lu/LunaTranslator 还在为日文、英文的视觉小说而烦恼吗&#xff1…...

超自动化巡检:如何应对海量增长的基础设施?

在数字化转型的浪潮中&#xff0c;企业IT基础设施正经历着前所未有的指数级增长。从物理服务器到虚拟机&#xff0c;从容器集群到云原生环境&#xff0c;从传统数据中心到边缘节点&#xff0c;运维对象的数量与种类正在以几何级数膨胀。某大型企业单日告警量可达130万条&#x…...

在微服务架构中统一接入Taotoken管理所有AI调用

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在微服务架构中统一接入Taotoken管理所有AI调用 当企业采用微服务架构时&#xff0c;AI能力的调用往往分散在各个独立的服务中。每…...

Klaxon与Jackson对比:选择最适合你的Kotlin JSON解析器

Klaxon与Jackson对比&#xff1a;选择最适合你的Kotlin JSON解析器 【免费下载链接】klaxon A JSON parser for Kotlin 项目地址: https://gitcode.com/gh_mirrors/kl/klaxon 在Kotlin开发中&#xff0c;JSON解析是处理数据交换的核心任务之一。Klaxon作为一款专为Kotli…...

PyTorch实战:手把手教你处理Mini-ImageNet数据集(附100类标签映射文件)

PyTorch实战&#xff1a;从零构建Mini-ImageNet数据管道与标签映射系统 当你第一次打开Mini-ImageNet的压缩包时&#xff0c;可能会被三个看似友好的CSV文件迷惑——train.csv、val.csv和test.csv。但当你真正尝试用PyTorch加载这些数据时&#xff0c;才会发现它们就像IKEA的组…...

基于本地文档的智能问答系统:从向量检索到私有化部署

1. 项目概述&#xff1a;当本地文档库遇上AI大脑最近在折腾一个挺有意思的东西&#xff0c;一个叫“word-GPT-Plus”的项目。简单来说&#xff0c;它解决了一个我&#xff0c;相信也是很多朋友都有的痛点&#xff1a;我电脑里存了海量的文档——工作周报、技术方案、学习笔记、…...

若依框架下SpringBoot Excel图片导出的实战与优化

1. 若依框架与Excel图片导出需求解析 第一次接触若依框架的Excel导出功能时&#xff0c;我发现它默认只支持文本和数字类型的数据导出。但在实际业务中&#xff0c;像商品详情导出、员工档案管理这类场景&#xff0c;经常需要将图片嵌入Excel表格。比如电商平台需要导出商品主图…...

TinyBERT实战:从知识蒸馏原理到代码实现全解析

1. TinyBERT与知识蒸馏初探 第一次听说TinyBERT时&#xff0c;我正在为一个移动端项目发愁——客户要求部署BERT模型&#xff0c;但手机内存根本装不下动辄400MB的原始模型。直到发现华为诺亚方舟实验室开源的TinyBERT&#xff0c;这个仅有57MB的轻量模型&#xff0c;在GLUE基准…...