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

news2024/10/7 4:30:12

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

  • 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]];
	}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1815999.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI预测体彩排3采取888=3策略+和值012路或双胆下一测试6月11日新模型预测第1弹

很抱歉各位小伙伴&#xff0c;端午节三天去了趟外地&#xff0c;没有按时更新3D和排三的预测。前面跟大家说过&#xff0c;8码定位是关键&#xff0c;8码定位能稳定在80%的命中率&#xff0c;才有望通过缩号缩至200-250注以内通过等额方式进行投资。由于前面的模型对8码定位的效…

家用洗地机怎么选?四大行业精品集合,识别度超高

家用洗地机&#xff0c;作为一种能够高效清洁地面的清洁工具&#xff0c;不仅减轻了人们家务的轻度&#xff0c;也给人们腾出了很多空闲的时间去享受生活。但是洗地机那么多&#xff0c;我们在面对洗地机选购的时候&#xff0c;我们应该要注意哪些呢&#xff1f;下面就为大家详…

每日一练:攻防世界:base64stego

base64stego&#xff1a; 打开压缩包发现被加密&#xff0c;用winhex查看&#xff0c;发现是伪加密&#xff0c;修改文件目录区的全局方式位标记&#xff0c;成功打开压缩包&#xff0c;得到一个文本 这里我想的有三种情况&#xff1a;1.直接base64解码&#xff0c;然后看解码…

搭建个人知识库 | 手把手教你本地部署大模型

一、引言 今天给大家分享的是手把手教你如何部署本地大模型以及搭建个人知识库 读完本文&#xff0c;你会学习到 如何使用Ollama一键部署本地大模型通过搭建本地的聊天工具&#xff0c;了解ChatGPT的信息是如何流转的RAG的概念以及所用到的一些核心技术如何通过AnythingLLM这…

PGFed: Personalize Each Client’s Global Objective for Federated Learning

ICCV-2023, 文章提出显式隐式的概念,作者通过实验发现显式比隐式的效果好,显式方式通过直接与多个客户的经验风险互动来更新模型,并用泰勒展开式降为 O ( N ) O(N) O(N)通讯成本。 文章地址:arxiv code: 作者开源 贡献 1.我们发现个性化 FL 算法的显式性赋予了其更强的…

wordpress旅游网站模板

旅行社wordpress主题 简洁实用的旅行社wordpress主题&#xff0c;适用于旅行社建网站的wordpress主题模板。 https://www.jianzhanpress.com/?p4296 旅游WordPress主题 简洁实用的旅游WordPress主题&#xff0c;适合做旅游公司网站的WordPress主题模板。 https://www.jian…

Ecovadis审核的内容

Ecovadis审核的内容。Ecovadis是一家国际性的企业社会责任评估机构&#xff0c;旨在为全球供应链的可持续性发展提供评估和审核。在本文中&#xff0c;我们将从以下几个方面详细介绍Ecovadis审核的内容&#xff1a; 一、Ecovadis审核的范围和目的 Ecovadis审核的范围涵盖了各个…

新增的JDK17语法特性

一、引入 从springboot3.0开始&#xff0c;已经不支持JDK8了&#xff0c;从3.0开始&#xff0c;转变为JDK17 了解详情点击官方博客链接&#xff1a;https://spring.io/blog/2022/01/20/spring-boot-3-0-0-m1-is-now-available?spma2c6h.12873639.article-detail.24.766d46b4…

最新下载:CorelDraw 2023【软件附加安装教程】

简介&#xff1a; CorelDRAW Graphics Suite 订阅版拥有配备齐全的专业设计工具包&#xff0c;可以通过非常高的效率提供令人惊艳的矢量插图、布局、照片编辑和排版项目。价格实惠的订阅就能获得令人难以置信的持续价值&#xff0c;即时、有保障地获得独家的新功能和内容、一流…

目标检测6:采用yolov8, RK3568推理的性能

最近有个小伙伴&#xff0c;问我rk3568上推理图片&#xff0c;1秒能达到多少&#xff1f; 本次采用模型为yolov8s.rknn&#xff0c;作了一次验证。 解析一段视频文件&#xff0c;1280*720, fps 24。读取视频文件&#xff0c;然后进行推理。 通过性能优化&#xff0c;发现推理…

RPA实战案例解析,一文看懂RPA工作原理

在这个快节奏的时代&#xff0c;我们渴望更多时间追求梦想。面对电脑前堆积的数据录入和商品上架等重复工作&#xff0c;我们感到束缚。然而&#xff0c;RPA机器人——这位“数字精灵”&#xff0c;正悄然改变我们的生活。它不仅是工具&#xff0c;更是我们工作的伙伴和创新的助…

Codesys中根据时间生成随机数字

一、 说明 LTIME()函数返回LTIME 时间类型数据 这个函数产生自系统启动以来经过的时间&#xff0c;以纳秒为单位&#xff0c;以扫描周期1ms为例&#xff0c;这个函数每次获得的纳妙数是随机的&#xff0c;没有规律。 二、作用 例如用来生成0到100的随机数&#xff0c;可以用L…

WebSocket 基础使用

1.基本概念 WebSocket 支持双方通信即服务端可以主动推送给用户端&#xff0c;用户端也可以主动推送消息给服务器。前端必须进行协议升级为 WebSocket 名称值Upgradewebsocket 2. 后端代码 package com.koshi.websocket.server;import com.alibaba.fastjson.JSON; import com…

互联网医院系统源码的创新应用:预约挂号小程序开发实战

预约挂号小程序作为互联网医院系统的创新应用&#xff0c;更加贴近用户需求&#xff0c;实现了预约挂号的便捷化和智能化。本篇文章&#xff0c;笔者将带领读者进入预约挂号小程序开发的实战过程&#xff0c;探索互联网医院系统源码在小程序开发中的创新应用。 一、互联网医院系…

【大模型应用开发极简入门】微调(一):1.微调基础原理介绍、2. 微调的步骤、3. 微调的应用(Copilot、邮件、法律文本分析等)

文章目录 一. 开始微调1. 选择合适的基础模型2. 微调和少样本学习2.1. 对比微调和少样本学习2.2. 微调需要的数据量 二. 使用OpenAI API进行微调1. 数据生成1.1. JSONL的数据格式1.2. 数据生成工具1.3. 数据文件的细节注意 2. 上传数据来训练模型3. 创建微调模型4. 列出微调作业…

用 Kotlin 多平台开发构建跨平台应用程序:深入探索 KMP 模板工程

用 Kotlin 多平台开发构建跨平台应用程序&#xff1a;深入探索 KMP 模板工程 Kotlin 多平台开发 (KMP) 是一种强大的工具&#xff0c;可用于构建跨平台移动、桌面和 Web 应用程序。它提供了一种统一的代码基础&#xff0c;使开发人员能够高效地针对多个平台开发应用程序。 KM…

解密有道翻译响应数据末尾出现乱码问题的解决方法

运行解密响应数据程序&#xff1a; D:\Python\Python311\python.exe E:\baichuan\youdaos.py {"code":0,"dictResult":{"ce":{"word":{"trs"D:\Python\Python311\python.exe E:\baichuan\youdaospdm.pyD:\Python\Python31…

ESP32s3与Lsm6ds3通信---i2c【开源】

接线 ESPS3&#xff0c;I2C的初始化 #ifdef __cplusplus extern "C" { #endif #define I2C_MASTER_SCL_IO CONFIG_I2C_MASTER_SCL /*!< GPIO number used for I2C master clock */ #define I2C_MASTER_SDA_IO CONFIG_I2C_MASTER_SDA …

鸿蒙轻内核A核源码分析系列五 虚实映射(5)虚实映射解除

虚实映射解除函数LOS_ArchMmuUnmap解除进程空间虚拟地址区间与物理地址区间的映射关系&#xff0c;其中参数包含MMU结构体、解除映射的虚拟地址和解除映射的数量count,数量的单位是内存页数。 ⑴处函数OsGetPte1用于获取指定虚拟地址对应的L1页表项数据。⑵处计算需要解除的无效…

【文献阅读】一种多波束阵列重构导航抗干扰算法

引言 针对导航信号在近地表的信号十分微弱、抗干扰能力差的问题&#xff0c;文章提出了自适应波束形成技术。 自适应波束形成技术可以分为调零抗干扰算法和多波束抗干扰算法。 调零抗干扰算法主要应用功率倒置技术&#xff0c;充分利用导航信号功率低于环境噪声功率的特点&…