目录

python降低图像的灰度分辨率——冈萨雷斯数字图像处理

原理:

降低图像的灰度分辨率是指减少图像中不同灰度级别的数量,从而使图像看起来更加粗糙或简化。这可以通过减少灰度级别的数量或重新映射灰度级别来实现。以下是一些常见的降低图像灰度分辨率的原理和方法:

灰度量化(Gray Level Quantization):灰度量化是最常见的方法之一,它涉及将原始图像中的灰度级别映射到较少的离散值。例如,将256级灰度映射到16级灰度,每个新的灰度级别代表一定范围内的原始灰度级别。

直方图均衡化(Histogram Equalization):直方图均衡化是一种增强图像对比度的方法,但它也可以降低灰度分辨率。通过重新分布图像的灰度级别,可以使某些灰度级别合并在一起,从而减少分辨率。

阈值处理(Thresholding):阈值处理将图像的灰度级别分成两个或多个类别。图像中的像素要么属于一个类别,要么属于另一个类别,这会导致降低图像的分辨率。

颜色映射(Color Mapping):颜色映射是一种将灰度图像映射到伪彩色或其他颜色映射方案的方法。这可以减少图像的灰度分辨率,同时提供更多的视觉信息。

模糊(Blurring):模糊操作可以用来降低图像的灰度分辨率。通过应用一种模糊滤波器,图像中的细节会被混合在一起,导致降低分辨率。

像素化(Pixelation):像素化是一种通过合并相邻像素的方法来降低图像的灰度分辨率。这导致图像变得更加粗糙,丧失了细节。

降低图像的灰度分辨率可以用于多种用途,包括图像压缩、隐私保护、简化图像处理等。选择哪种方法取决于你的应用需求和图像处理的目标。无论哪种方法,都会在某种程度上损失图像的信息和质量,因此需要谨慎选择。

编写代码,输出如下图所示的结果:

用opencv读入原图后,以2的幂次(20-27)为量化间隔对原图的灰度量化8次。量化可以通过将原图的灰度值除以相应量化间隔并取整来实现。之后得到的图像可以通过下面的公式转换到0-255的灰度范围内以便于显示:

8次量化完成后,用pyplot同时显示所有结果图。

python 复制代码
import cv2
import math
import matplotlib.pyplot as plt
import numpy as np


img=cv2.imread("Fig0221.tif")
rows,cols,channels=img.shape

img_list=[]
img_name_list=[] 

for i in range(8):
    index=int(math.pow(2,i))
    img_new=np.floor(img/index)
    img_new=np.uint8(255*img_new/np.max(img_new))
    img_list.append(img_new)
    img_name_list.append("gray level="+str(int(256/index)))

_,axs=plt.subplots(2,4)
for i in range(2):
    for j in range(4):
        axs[i,j].imshow(img_list[i*4+j])
        axs[i,j].set_title(img_name_list[i*4+j])
        axs[i,j].axes.get_xaxis().set_visible(False)
        axs[i,j].axes.get_yaxis().set_visible(False)

plt.savefig("quantization.jpg")
plt.show()

结果展示

灰度分辨率

即灰度级,指的是用于量化灰度的比特数,通常用2的整数次幂来表示,最常用8bit,bit数的减小倾向于对比度增加

即 2^8 灰度范围[0~255]

用opencv读入原图后,以2的幂次(20-27)为量化间隔对原图的灰度量化8次。量化可以通过将原图的灰度值除以相应量化间隔并取整来实现。之后得到的图像可以通过下面的公式转换到0-255的灰度范围内以便于显示:

f_s=255×[f_m/max(f_m)]

8次量化完成后,用pyplot同时显示所有结果图

本文是转载文章,点击查看原文
如有侵权,请联系 xyy@jishuzhan.net 删除
相关推荐
维度攻城狮4 分钟前
实现在Unity3D中仿真汽车,而且还能使用ros2控制
python·unity·docker·汽车·ros2·rviz2
陈皮话梅糖@6 分钟前
使用 Provider 和 GetX 实现 Flutter 局部刷新的几个示例
开发语言·javascript·flutter
简简单单做算法8 分钟前
基于mediapipe深度学习和限定半径最近邻分类树算法的人体摔倒检测系统python源码
人工智能·python·深度学习·算法·分类·mediapipe·限定半径最近邻分类树
hvinsion1 小时前
基于PyQt5的自动化任务管理软件:高效、智能的任务调度与执行管理
开发语言·python·自动化·自动化任务管理
Aphelios3801 小时前
Java全栈面试宝典:线程机制与Spring IOC容器深度解析
java·开发语言·jvm·学习·rbac
qq_529835352 小时前
装饰器模式:如何用Java打扮一个对象?
java·开发语言·装饰器模式
日暮南城故里2 小时前
Java学习------源码解析之StringBuilder
java·开发语言·学习·源码
Vitalia2 小时前
从零开始学Rust:枚举(enum)与模式匹配核心机制
开发语言·后端·rust
飞飞翼3 小时前
python-flask
后端·python·flask
双叶8363 小时前
(C语言)虚数运算(结构体教程)(指针解法)(C语言教程)
c语言·开发语言·数据结构·c++·算法·microsoft