千家信息网

Python中图像量化处理的示例分析

发表于:2025-02-22 作者:千家信息网编辑
千家信息网最后更新 2025年02月22日,小编给大家分享一下Python中图像量化处理的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一.图像量化处理原理量
千家信息网最后更新 2025年02月22日Python中图像量化处理的示例分析

小编给大家分享一下Python中图像量化处理的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

一.图像量化处理原理

量化(Quantization)旨在将图像像素点对应亮度的连续变化区间转换为单个特定值的过程,即将原始灰度图像的空间坐标幅度值离散化。量化等级越多,图像层次越丰富,灰度分辨率越高,图像的质量也越好;量化等级越少,图像层次欠丰富,灰度分辨率越低,会出现图像轮廓分层的现象,降低了图像的质量。图8-1是将图像的连续灰度值转换为0至255的灰度级的过程[1-3]。

如果量化等级为2,则将使用两种灰度级表示原始图片的像素(0-255),灰度值小于128的取0,大于等于128的取128;如果量化等级为4,则将使用四种灰度级表示原始图片的像素,新图像将分层为四种颜色,0-64区间取0,64-128区间取64,128-192区间取128,192-255区间取192,依次类推。

图8-2是对比不同量化等级的"Lena"图。其中(a)的量化等级为256,(b)的量化等级为64,(c)的量化等级为16,(d)的量化等级为8,(e)的量化等级为4,(f)的量化等级为2。

二.图像量化实现

图像量化的实现过程是建立一张临时图片,接着循环遍历原始图像中所有像素点,判断每个像素点应该属于的量化等级,最后将临时图像显示。下面的代码将灰度图像转换为两种量化等级[4]。

# -*- coding: utf-8 -*-# By:Eastmountimport cv2  import numpy as np  import matplotlib.pyplot as plt#读取原始图像img = cv2.imread('lena-hd.png')#获取图像高度和宽度height = img.shape[0]width = img.shape[1]#创建一幅图像new_img = np.zeros((height, width, 3), np.uint8)#图像量化操作 量化等级为2for i in range(height):    for j in range(width):        for k in range(3): #对应BGR三分量            if img[i, j][k] < 128:                gray = 0            else:                gray = 128            new_img[i, j][k] = np.uint8(gray)        #显示图像cv2.imshow("src", img)cv2.imshow("", new_img)#等待显示cv2.waitKey(0)cv2.destroyAllWindows()

其输出结果如图8-3所示,它将灰度图像划分为两种量化等级。

三.图像量化等级对比

下面的代码分别比较了量化等级为2、4、8的量化处理效果[5]。

# -*- coding: utf-8 -*-# By:Eastmountimport cv2  import numpy as np  import matplotlib.pyplot as plt#读取原始图像img = cv2.imread('lena-hd.png')#获取图像高度和宽度height = img.shape[0]width = img.shape[1]#创建一幅图像new_img1 = np.zeros((height, width, 3), np.uint8)new_img2 = np.zeros((height, width, 3), np.uint8)new_img3 = np.zeros((height, width, 3), np.uint8)#图像量化等级为2的量化处理for i in range(height):    for j in range(width):        for k in range(3): #对应BGR三分量            if img[i, j][k] < 128:                gray = 0            else:                gray = 128            new_img1[i, j][k] = np.uint8(gray)#图像量化等级为4的量化处理for i in range(height):    for j in range(width):        for k in range(3): #对应BGR三分量            if img[i, j][k] < 64:                gray = 0            elif img[i, j][k] < 128:                gray = 64            elif img[i, j][k] < 192:                gray = 128            else:                gray = 192            new_img2[i, j][k] = np.uint8(gray)#图像量化等级为8的量化处理for i in range(height):    for j in range(width):        for k in range(3): #对应BGR三分量            if img[i, j][k] < 32:                gray = 0            elif img[i, j][k] < 64:                gray = 32            elif img[i, j][k] < 96:                gray = 64            elif img[i, j][k] < 128:                gray = 96            elif img[i, j][k] < 160:                gray = 128            elif img[i, j][k] < 192:                gray = 160            elif img[i, j][k] < 224:                gray = 192            else:                gray = 224            new_img3[i, j][k] = np.uint8(gray)#用来正常显示中文标签plt.rcParams['font.sans-serif']=['SimHei']#显示图像titles = ['(a) 原始图像', '(b) 量化-L2', '(c) 量化-L4', '(d) 量化-L8']  images = [img, new_img1, new_img2, new_img3]  for i in range(4):     plt.subplot(2,2,i+1), plt.imshow(images[i], 'gray'),    plt.title(titles[i])     plt.xticks([]),plt.yticks([])  plt.show()

输出结果如图8-4所示,该代码调用matplotlib.pyplot库绘制了四幅图像,其中(a)表示原始图像,(b)表示等级为2的量化处理,(c)表示等级为4的量化处理,(d)表示等级为8的量化处理。

四.K-Means聚类实现量化处理

除了通过对像素进行统计比较量化处理,还可以根据像素之间的相似性进行聚类处理。这里补充一个基于K-Means聚类算法的量化处理过程,它能够将彩色图像RGB像素点进行颜色分割和颜色量化。此外,该部分只是带领读者简单认识该方法,更多K-Means聚类的知识将在图像分割文章中进行详细叙述[6]。

# coding: utf-8# By:Eastmountimport cv2import numpy as npimport matplotlib.pyplot as plt#读取原始图像img = cv2.imread('luo.png') #图像二维像素转换为一维data = img.reshape((-1,3))data = np.float32(data)#定义中心 (type,max_iter,epsilon)criteria = (cv2.TERM_CRITERIA_EPS +            cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)#设置标签flags = cv2.KMEANS_RANDOM_CENTERS#K-Means聚类 聚集成4类compactness, labels, centers = cv2.kmeans(data, 8, None, criteria, 10, flags)#图像转换回uint8二维类型centers = np.uint8(centers)res = centers[labels.flatten()]dst = res.reshape((img.shape))#图像转换为RGB显示img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)dst = cv2.cvtColor(dst, cv2.COLOR_BGR2RGB)#用来正常显示中文标签plt.rcParams['font.sans-serif']=['SimHei']#显示图像titles = ['原始图像', '聚类量化 K=8']  images = [img, dst]  for i in range(2):     plt.subplot(1,2,i+1), plt.imshow(images[i], 'gray'),    plt.title(titles[i])     plt.xticks([]),plt.yticks([])  plt.show()

输出结果如图8-5所示。

它通过K-Means聚类算法将彩色人物图像的灰度聚集成八种颜色。核心代码如下:

cv2.kmeans(data, 8, None, criteria, 10, flags)

以上是"Python中图像量化处理的示例分析"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

图像 等级 处理 灰度 原始 像素 区间 代码 分量 过程 颜色 图片 标签 篇文章 结果 如图 输出 示例 中图 分析 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 服务器机箱与家用电脑的区别 方舟服务器怎么开启管理员 一直跳网络安全怎么设置关闭 dm数据库双向同步网络中断 湖南惠普服务器维修调试虚拟主机 传奇世界如何开服务器 怀柔区大规模软件开发经历 腾讯域名阿里云服务器怎么备案 网络安全小视频防诈骗 什么不是软件开发模型 地下城安图恩什么时候换服务器 数据库密码存放文件夹 mysql数据库多表查询 富孟网络安全吗 狮子王网络技术 网络安全周 天津 对青少年学生网络安全教育 灿玛网络技术有限公司 网络安全有哪些高可用性保障技术 ip服务器密码忘记了怎么办 管理软件开发哪个公司好 如何在2b2t服务器中生存下去 网络安全防护检测技术 耕地资源土壤数据库 软件开发和平面设计哪个好学 数据库安全制度规范化 mysql数据库多表查询 2008服务器配置远程管理 数据库的运行和维护主要包括 服务器hdm接口是什么意思
0