图像处理灰度变换

article/2025/8/27 6:12:58

1 灰度变换简介

  灰度变换是对图像的每个像素按照灰度映射函数进行映射的变换,其作用于每个像素。灰度变换一般用来进行图像增强,提高图像的对比度,改善图像的灰度分布等。灰度变换根据灰度变换函数的不同分为线性函数变换、对数函数和幂函数变换。
p o u t i , j = f ( p i n i , j ) pout_{i,j}=f(pin_{i,j}) pouti,j=f(pini,j)

   f f f为灰度变换函数, i i i j j j分别为图像的下标索引, p i n i j pin_{ij} pinij i , j i,j i,j处像素值。
  灰度变换的函数可以使任意函数,可以根据不同的使用场景选择不同的灰度变换函数。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eGtF9Dcf-1663634507062)(imgs/funcs.png)]

  最简单的灰度变换的实现如下,遍历每一个像素然后使用函数Func来处理每个像素

template<class Func>
static Mat pixelWiseTransform(const Mat &img, Func f) {Mat retMat = img.clone();for (int i = 0; i < img.rows; i++) {for (int j = 0; j < img.cols; j++) {for (int k = 0; k < img.channels(); k++) {if (img.channels() == 3) {retMat.at<cv::Vec3b>(i, j)[k] = static_cast<uchar>(imgValueLmit(f(retMat.at<cv::Vec3b>(i, j)[k])));}else if (img.channels() == 1) {retMat.at<uchar>(i, j) = static_cast<uchar>(imgValueLmit(f(retMat.at<uchar>(i, j))));}else {abort();}}}}return std::move(retMat);
}

2 线性灰度变换

  最简单的灰度变换函数就是线性灰度变换,线性灰度变换的灰度变换函数为线性函数:
f ( x ) = a x + b f(x)=ax+b f(x)=ax+b
   a a a为斜率, b b b y y y轴截距, x x x为输入点的像素值, f ( x ) f(x) f(x)为对应点的输出像素值。

  • a = 1 , b = 0 a = 1, b = 0 a=1,b=0时,为恒定函数,图像不会发生变化;

  • a = − 1 , b = 255 a = -1, b = 255 a=1,b=255时,图像发生反转;
    在这里插入图片描述

  • a = 1 , b ! = 0 a = 1, b != 0 a=1,b!=0时,图像中的值整体增大b,图像整体变暗或者变亮;
    在这里插入图片描述

  • a < 0 , b 为恒定 a < 0, b为恒定 a<0,b为恒定时;
    在这里插入图片描述

  • a > 1 , b 恒定 a > 1, b恒定 a>1,b恒定时,图像对比度增加,整体变亮亮的更亮,黑的变灰色;

  • a < 1 & a > 0 , b 恒定 a < 1 \And a > 0, b恒定 a<1&a>0,b恒定时,图像对比度减小,整体变暗;
    在这里插入图片描述

3 对数变换

  对数变换的通用形式为:
p o u t i , j = c l o g ( p 1 + p i n i , j ) pout_{i,j}=clog(p1 + pin_{i,j}) pouti,j=clog(p1+pini,j)
  对数变换,将源图像中范围较窄的低灰度值映射到范围较宽的灰度区间,同时将范围较宽的高灰度值区间映射为较窄的灰度区间,从而扩展了暗像素的值,压缩了高灰度的值,能够对图像中低灰度细节进行增强。
在这里插入图片描述

4 幂变换

  幂变换的基本形式为
p o u t i , j = c p i n i , j r pout_{i,j}=c{pin_{i,j}}^{r} pouti,j=cpini,jr
  伽马变换的效果与对数变换有点类似,当 γ > 1 γ>1 γ>1时将较窄范围的低灰度值映射为较宽范围的灰度值,同时将较宽范围的高灰度值映射为较窄范围的灰度值;当 γ < 1 γ<1 γ<1时,情况相反,与反对数变换类似。

  • r 为 1.4 r为1.4 r1.4变换 c c c
    在这里插入图片描述

  • c = 1 c=1 c=1变换 r r r
    在这里插入图片描述

  gamma变换最常用的是用来校正显示器显示颜色的亮度。

5 分段函数变换

  分段函数变换可以根据具体的需要设计多段映射函数来处理不同灰度段的颜色,每段的映射可以是线性映射也可以非线性映射。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


http://chatgpt.dhexx.cn/article/aspQdPNN.shtml

相关文章

数字图像处理(五)图像灰度化处理

1.图像灰度化 灰度图像上每个像素的颜色值又称为灰度,指黑白图像中点的颜色深度, 范围一般从0到255 ,白色为255 ,黑色为0。所谓灰度值是指色彩的浓淡程度,灰度直方图是指一幅数字图像中,对应每一个灰度值统计出具有该灰度值的象素数。 灰度就是没有色彩, RGB色彩分量全部相等…

【图像处理】灰度化

图像灰度化就是图像中的每一像素点的分量都满足RGBV的关系&#xff0c;此时的V就是灰度值 为什么要灰度化&#xff1f; 灰度是指含有亮度信息&#xff0c;不含彩色信息的图像。 使用灰度图的好处&#xff1a; 1、RGB的值都一样 2、图像数据 调色板索引值 RGB的值 亮度值…

(二)对图像进行预处理(灰度化,二值化)

对图像进行预处理&#xff08;灰度化&#xff0c;二值化&#xff09; 一、图像灰度化处理 图像灰度化是指每个像素只有一个采样颜色的图像&#xff0c;这类图像通常显示为从最暗黑色到最亮的白色的灰度。   灰度图像与黑白图像不同&#xff0c;在计算机图像领域中黑白图像只…

【灰度图像】

像素 图像的组成元素是像素&#xff0c;每一个像素都有明确的位置和被分配的色彩数值。 图像分辨率 图像分辨率是指在计算机中保存和显示一幅数字图像所具有的分辨率&#xff0c;它和图像的像素有直接的关系。例如&#xff0c;一张分辨率为640480像素的图片&#xff0c;其分…

OpenCV图像灰度化的六种方法

OpenCV图像灰度化的六种方法 1.环境2.部分api及其参数解析3.灰度化方法实例及效果3.1 读取时灰度化处理3.2 调用cvtColor灰度化处理3.3 平均值法&#xff1a;3.4 最大值法3.5 分量法3.6 加权平均法 Opencv4 官方文档 : https://docs.opencv.org/4.2.0/ Opencv4 for Python中文文…

图像的灰度化原理和实现

一、图像的灰度化处理的基本原理 将彩色图像转化成为灰度图像的过程成为图像的灰度化处理。彩色图像中的每个像素的颜色有R、G、B三个分量决定&#xff0c;而每个分量有255中值可取&#xff0c;这样一个像素点可以有1600多万&#xff08;255*255*255&#xff09;的颜色的变化范…

图像处理:图像灰度化

灰度图像上每个像素的颜色值又称为灰度&#xff0c;指黑白图像中点的颜色深度&#xff0c;范围一般从0到255&#xff0c;白色为255&#xff0c;黑色为0。所谓灰度值是指色彩的浓淡程度&#xff0c;灰度直方图是指一幅数字图像中&#xff0c;对应每一个灰度值统计出具有该灰度值…

图像灰度化的三种方法(matlab、C++、Python实现)

灰度化处理就是将一幅色彩图像转化为灰度图像的过程。彩色图像分为R&#xff0c;G&#xff0c;B三个分量&#xff0c;分别显示出红绿蓝等各种颜色&#xff0c;灰度化就是使彩色的R&#xff0c;G&#xff0c;B分量相等的过程。灰度值大的像素点比较亮&#xff08;像素值最大为25…

图像灰度化的三种常见方法

ⅠWhat 首先是baike给出的官方灰度化定义&#xff1a; 灰度化&#xff0c;在RGB模型中&#xff0c;如果RGB时&#xff0c;则彩色表示一种灰度颜色&#xff0c;其中RGB的值叫灰度值&#xff0c;因此&#xff0c;灰度图像每个像素只需一个字节存放灰度值&#xff08;又称强度值…

图像基本处理(灰度化)

项目场景&#xff1a; 今天我们开始最基础的图像处理&#xff0c;将一张图片进行灰度化处理。我们将使用OpenCV来进行图像的处理 基础知识 图片主要包含以下内容&#xff1a; 1.像素&#xff0c;也就是我们通常说的RGB模型&#xff0c;红、绿、蓝组成。 RGB颜色模型是三维直角…

图像灰度化处理

文章目录 1. 图像灰度化2. 图像灰度化处理方法2.1 最大值法2.2 平均值法2.3 加权平均法 3. 图像灰度化处理方法的Python实现3.1 最大值法3.2 平均值法3.3 加权平均法3.4 最大值法、平均值法和加权平均法的比较3.5 opencv-python中灰度处理方法的应用 4. 源码仓库地址 1. 图像灰…

excel转换linux时间戳,在Excel中转换时间戳(timeStamp)

TEXT((A2/10008*3600)/8640070*36519,"yyyy-mm-dd hh:mm:ss.000") ((B2-70*365-19)*86400-8*3600)*1000 什么是时间戳&#xff1f; Unix时间戳(Unix timestamp)&#xff0c;或称Unix时间(Unix time)、POSIX时间(POSIX time)&#xff0c;是一种时间表示方式。 定义为从…

java linux 时间戳转时间_Java时间和时间戳的相互转换

Java时间和时间戳的相互转换 时间转换为时间戳&#xff1a; /* * 将时间转换为时间戳 */ public static String dateToStamp(String s) throws ParseException{ String res; SimpleDateFormat simpleDateFormat new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date …

linux时间转excel,linux时间戳转换【操作模式】

虽然电脑已经很普遍了&#xff0c;但是一些年长的人对电脑的操作不是很熟悉&#xff0c;比如在使用win7系统时一旦遇到linux时间戳转换 时就懵了&#xff0c;对于linux时间戳转换 处理起来相对来说较简单&#xff0c;按照我们的步骤处理linux时间戳转换 很容易上手&#xff0c;…

excel linux时间戳转换成日期,Excel将Unix时间戳转换为日期

Excel默认不支持Unix格式时间戳&#xff0c;这在导入数据时十分不便。可以用以下公式将时间戳转换成Excel格式的时间&#xff1a;(A18*3600)/8640070*36519 其中A1为时间戳的单元格&#xff0c;8*3600中的8为中国的时区。然后将公式单元格设置为日期时间格式即可。转换结果如下…

Linux C/C++实现时间戳转换工具

在大多数 UNIX 系统中&#xff0c;当前时间存储为自特定时刻以来经过的时间以简化&#xff0c;将时间保持为长整数。所有 UNIX 系统普遍接受的时刻是 1970 年 1 月 1 日凌晨 12:00:00。 这称为 UNIX 时间戳&#xff0c;并被所有现代 UNIX/Linux 系统识别。 Linux 时间戳date命…

linux系统date命令(时间戳与日期相互转换)

引言 在做数据分析时经常会用到时间&#xff0c;但有时系统或应用时间显示的格式不统一&#xff0c;这就需要将格式转换为一致&#xff0c;才能对比数据进一步做分析&#xff0c;以前常用网上在线时间戳转换工具&#xff0c;但每次都在先打开浏览器进行搜索在线时间戳转换工具…

Linux下时间戳格式和标准时间格式的转换

大家都知道linux文件系统中的每个文件都有三种时间戳&#xff1a; 访问时间&#xff08;atime——access time&#xff09;&#xff1a;就是上次访问这个文件的时间。 改变时间&#xff08;ctime——change time&#xff09;&#xff1a;就是文件的inode改变的时间&#xff08;…

Python——保存图片到本地

举个例子,比如我想保存github网,浏览器头有个图标. resp requests.get("https://github.com/favicon.ico") with open("C:\\Python37\\911.jpg",wb)as jpg: jpg.write(r.content)

python读取、保存图片的方法

matplotlib 输入&#xff1a;列表或二维矩阵 &#xff08;1&#xff09;例如列表&#xff1a; #codingutf-8 from matplotlib import pyplot as plt X [[1,2],[3,4],[5,6]] plt.imshow(X) #AxesImage(80,52.8;496x369.6) plt.colorbar() plt.show() #导入AxesImage结果…