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

相关推荐
lsx2024069 小时前
MySQL WHERE 子句详解
开发语言
Tony Bai9 小时前
【Go模块构建与依赖管理】09 企业级实践:私有仓库与私有 Proxy
开发语言·后端·golang
Lucky小小吴9 小时前
开源项目5——Go版本快速管理工具
开发语言·golang·开源
Mr.Jessy9 小时前
Web APIs 学习第五天:日期对象与DOM节点
开发语言·前端·javascript·学习·html
杨福瑞9 小时前
数据结构:单链表(2)
c语言·开发语言·数据结构
进化中的码农9 小时前
Go中的泛型编程和reflect(反射)
开发语言·笔记·golang
独行soc9 小时前
2025年渗透测试面试题总结-234(题目+回答)
网络·python·安全·web安全·渗透测试·1024程序员节·安全狮
木头左10 小时前
年化波动率匹配原则在ETF网格区间选择中的应用
python
清空mega10 小时前
从零开始搭建 flask 博客实验(3)
后端·python·flask
音符犹如代码10 小时前
Java并发List实战:CopyOnWriteArrayList原理与ArrayList常见面试题
java·开发语言·面试·list