灰度值 vs 像素值& 阈值化 vs 截断 vs 归一化 & python显示图像时的处理

记录在进行图像处理当中,常用到的灰度值、像素值区别以及常见图像处理方式

灰度值和像素值的区别

  • 像素值:在数字图像中,像素值通常指的是构成图像的最小单元的亮度或颜色值。在彩色图像中,每个像素值通常由红、绿、蓝(RGB)三个颜色通道的值组成,每个通道的取值范围通常是0-255(8位深)。因此,一个像素在彩色图像中可以表示约1670万种颜色(256 × 256 × 256)。

  • 灰度值:灰度值是指在灰度图像中每个像素的亮度值,通常也取值范围为0-255,其中0代表黑色,255代表白色,介于两者之间的值表示不同的灰度。灰度图像通常只包含亮度信息,不包含颜色信息。(一般认为灰度图的像素值指的是灰度值)

对应关系
  • 灰度图:使用灰度值来表示,每个像素只有一个灰度值,用于表示图像的明暗程度。
  • 彩色图:使用像素值来表示,每个像素包含RGB三个通道的值,用于表示颜色和亮度。

在Python图像处理中超出阈值的处理

在Python的图像处理中,常用的库如PIL(Python Imaging Library)或OpenCV,处理超出阈值的像素值时通常有几种方法:

  1. 阈值化(Thresholding):这是一种简单的形式,如果像素值超过某个阈值,它会被设置为最大值(通常是255,表示白色),如果低于阈值,它会被设置为最小值(通常是0,表示黑色)。这种方法常用于灰度图像的二值化(即将图像中的像素值设置为0或255的过程,这样处理后的图像只包含黑白两种颜色。二值化主要用于简化图像分析,便于后续的图像处理任务,如轮廓检测、特征提取等)。

  2. 截断(Clipping):对于超出特定范围的值,可以将它们截断到最大或最小值。例如,如果设置了0-255的范围,任何超出这个范围的值将被设为255或0。

  3. 归一化(Normalization):将图像的像素值重新缩放到一个指定的范围内,通常是0到255。这通常用于调整图像的对比度。
    NormalizedValue=Value−MinValueMaxValue−MinValue×(NewMax−NewMin)+NewMin \text{NormalizedValue} = \frac{\text{Value} - \text{MinValue}}{\text{MaxValue} - \text{MinValue}} \times (\text{NewMax} - \text{NewMin}) + \text{NewMin} NormalizedValue=MaxValueMinValueValueMinValue×(NewMaxNewMin)+NewMin

  4. 自适应阈值化:与简单阈值化不同,自适应阈值化会根据像素周围区域的亮度自动调整阈值。这对于光照不均匀的图像特别有用。自适应阈值化不是使用全局阈值,而是根据图像局部区域的像素值计算阈值。其数学原理基于局部区域的统计特性,如平均值或加权平均值,使得阈值可以根据局部像素值的分布动态调整。

cv2.imshow()或plt.show()显示图像时,对超出阈值处理方式

对于cv2.imshow():

  • 如果图像的数据类型是无符号8位整数(uint8),那么超出0-255范围的像素值将被自动截断到这个范围内。也就是说,小于0的值将变为0,大于255的值将变为255。
  • 如果图像的数据类型是浮点数(如float32或float64),cv2.imshow()会将像素值乘以255,然后转换为uint8类型。在此过程中,小于0的值将变为0,大于1的值将变为255。

对于plt.show():

  • 如果图像的数据类型是uint8,plt.imshow()会直接显示图像,不对超出范围的像素值进行任何特殊处理。
  • 如果图像的数据类型是浮点数,plt.imshow()会将像素值映射到0-1的范围内,然后应用颜色映射表(colormap)进行显示。默认情况下,小于0的值将显示为颜色映射表的最小值所对应的颜色,大于1的值将显示为颜色映射表的最大值所对应的颜色。

cv2.imshow()和plt.imshow()在显示图像时会对超出范围的像素值进行一定的处理,但这并不会改变原始图像数据,原始图像数据中的像素值仍然保持不变。

### 使用 Python 实现离散余弦变换(DCT)进行图像处理 #### 方法概述 离散余弦变换 (Discrete Cosine Transform, DCT) 是一种常用的频域分析工具,广泛应用于图像压缩处理领域。相比于离散傅里叶变换 (DFT),DCT 只涉及实数值计算,因此更适合实际应用中的数据表示[^3]。 在 Python 中可以利用 `scipy` 库来快速实现 DCT 其逆变换 IDCT 的功能。以下是具体实现方式: --- #### 示例代码:基于 SciPy 的二维 DCT 图像处理 以下是一个完整的示例代码,展示如何加载一张灰度图像并对其进行 DCT 处理以及重建操作。 ```python import numpy as np from scipy.fftpack import dct, idct import matplotlib.pyplot as plt from skimage import io, color # 加载图像并转换为灰度图 image = io.imread('example_image.jpg') # 替换为你自己的图片路径 if image.ndim == 3: gray_image = color.rgb2gray(image) else: gray_image = image / 255.0 # 归一化到 [0, 1] # 显示原始图像 plt.figure(figsize=(10, 7)) plt.subplot(2, 2, 1), plt.imshow(gray_image, cmap='gray'), plt.title("Original Image") # 对图像执行二维 DCT dct_transformed = dct(dct(gray_image.T, norm='ortho').T, norm='ortho') # 显示 DCT 结果 plt.subplot(2, 2, 2), plt.imshow(np.log(abs(dct_transformed)), cmap='jet'), plt.title("DCT Coefficients (log scale)") # 截断高频部分以模拟 JPEG 压缩效果 threshold = 0.95 * abs(dct_transformed).max() # 设置阈值保留前 95% 幅度系数 dct_compressed = dct_transformed.copy() dct_compressed[np.abs(dct_compressed) < threshold] = 0 # 显示截断后的 DCT 系数分布 plt.subplot(2, 2, 3), plt.imshow(np.log(abs(dct_compressed)+1e-6), cmap='jet'), plt.title("Compressed DCT Coefficients (log scale)") # 执行逆 DCT 还原图像 idct_reconstructed = idct(idct(dct_compressed.T, norm='ortho').T, norm='ortho') idct_reconstructed = np.clip(idct_reconstructed, 0, 1) # 显示还原后的图像 plt.subplot(2, 2, 4), plt.imshow(idct_reconstructed, cmap='gray'), plt.title("Reconstructed Image") plt.tight_layout(), plt.show() ``` 此代码实现了以下几个步骤: 1. **读取与预处理**:将彩色图像转为灰度图,并归一化像素值至 `[0, 1]` 范围。 2. **DCT 正变换**:使用 `scipy.fftpack.dct` 函数完成二维正交标准化的 DCT 计算。 3. **频率截断**:通过设置幅度阈值去除高频分量,从而模拟图像压缩的效果。 4. **IDCT 逆变换**:恢复经过修改的 DCT 系数回空间域图像。 5. **可视化对比**:分别显示原始图像、DCT 频谱及其压缩版本的结果。 --- #### 关键点说明 - **正交规范化 (`norm='ortho'`)** 在调用 `dct()` 或 `idct()` 函数指定参数 `norm='ortho'`,可确保变换矩阵具有单位范数性质,便于后续重构过程保持能量守恒关系[^2]。 - **日志尺度绘图** 绘制 DCT 系数直方图常采用对数值形式(即 `np.log(abs(...))`),以便更清晰地观察低频区域集中现象。 - **误差控制** 数字信号处理过程中不可避免存在舍入误差;当尝试完全精确再现输入数据需注意累积效应的影响[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值