文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-06-29 02:05

关注

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

一.图像量化处理原理

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

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

如果量化等级为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。

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

二.图像量化实现

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

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

三.图像量化等级对比

下面的代码分别比较了量化等级为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的量化处理。

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

四.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所示。

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

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

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

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

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯