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同时显示所有结果图

相关推荐
少控科技7 分钟前
QT高阶日记01
开发语言·qt
无限进步_18 分钟前
【C++】大数相加算法详解:从字符串加法到内存布局的思考
开发语言·c++·windows·git·算法·github·visual studio
“抚琴”的人19 分钟前
C#上位机工厂模式
开发语言·c#
巨大八爪鱼28 分钟前
C语言纯软件计算任意多项式CRC7、CRC8、CRC16和CRC32的代码
c语言·开发语言·stm32·crc
C+-C资深大佬35 分钟前
C++ 数据类型转换是如何实现的?
开发语言·c++·算法
love530love1 小时前
彻底解决 ComfyUI Mixlab 插件 Whisper.available False 的报错
人工智能·windows·python·whisper·win_comfyui
木千1 小时前
Qt全屏显示时自定义任务栏
开发语言·qt
不解风水1 小时前
《深度学习入门:基于 Python 的理论与实现》(斋藤康毅)
人工智能·python·深度学习
偷星星的贼111 小时前
数据分析与科学计算
jvm·数据库·python
2501_944424121 小时前
Flutter for OpenHarmony游戏集合App实战之俄罗斯方块七种形状
android·开发语言·flutter·游戏·harmonyos