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

相关推荐
说码解字1 分钟前
C++ 实现环形缓冲区
开发语言·c++
yzx9910132 分钟前
Python开发功能项目
服务器·开发语言·人工智能·python·深度学习
go_bai2 分钟前
map与set的模拟实现
开发语言·c++·笔记·学习方法
秋风&萧瑟15 分钟前
【C++】继承和派生
开发语言·c++
HINOTOR_20 分钟前
DAY 29 复习日:类的装饰器
开发语言·python
Gyoku Mint1 小时前
机器学习×第七卷:正则化与过拟合——她开始学会收敛,不再贴得太满
人工智能·python·算法·chatgpt·线性回归·ai编程
黑听人1 小时前
【力扣 中等 C++】90. 子集 II
开发语言·数据结构·c++·算法·leetcode
Wukong.Sun1 小时前
操作系统的概念,功能和目标
java·linux·开发语言·windows
虾球xz1 小时前
CppCon 2015 学习:Algorithmic Differentiation C++ & Extremum Estimation
开发语言·c++·学习
黑听人1 小时前
【力扣 简单 C】21. 合并两个有序链表
c语言·开发语言·数据结构·算法·leetcode