图像的采样和量化(python)

一、采样和量化的概念

        图像采样是将一副连续图像在空间上分割成M*N个网格,每个网格用一个亮度值或灰度值来表示,一个网格称为一个像素。图像间隔越大,所得图像像素数越少,空间分辨率越低,图像质量越差。

        图像量化是将图像像素点对应亮度的连续变化区间转换为单个特定值的过程,即将原始灰度图像的幅度值离散化。

二、图像采样代码

import numpy as np
import cv2 
import matplotlib.pyplot as plt
img =cv2.imread("4.jpg",0) #0代表读入灰色图像
plt.rcParams['font.family']='SimHei' #将全局中文字体显示成中文黑体
img3=img[::2,::2] #步长为2,每隔2个像素取一个像素点
img4=img[::4,::4]
img5=img[::8,::8]
img6=img[::16,::16]
img7=img[::32,::32]
plt.subplot(231)
plt.imshow(img,cmap="gray")
plt.title("256*256")
plt.axis('off')
img33=cv2.resize(img3,dsize=None,fx=2,fy=2) #保证与img相同尺寸
plt.subplot(232)
plt.imshow(img33,cmap='gray')
plt.title("128*128")
plt.axis('off')
img44=cv2.resize(img4,dsize=None,fx=4,fy=4) #保证与img相同尺寸
plt.subplot(233)
plt.imshow(img44,cmap='gray')
plt.title("64*64")
plt.axis('off') #隐藏x,y轴
#plt.xticks([]) #隐藏x轴
img55=cv2.resize(img5,dsize=None,fx=8,fy=8) #保证与img相同尺寸
plt.subplot(234)
plt.imshow(img55,cmap='gray')
plt.title("32*32")
plt.axis('off')
img66=cv2.resize(img6,dsize=None,fx=16,fy=16) #保证与img相同尺寸
plt.subplot(235)
plt.imshow(img66,cmap='gray')
plt.title("16*16")
plt.axis('off')
img77=cv2.resize(img7,dsize=None,fx=32,fy=32) #保证与img相同尺寸
plt.subplot(236)
plt.imshow(img77,cmap='gray')
plt.title("8*8")
plt.axis('off')

运行代码后的图片:

三、图像量化的代码

import numpy as np
import cv2 
import matplotlib.pyplot as plt
img =cv2.imread("4.jpg",0) #0代表读入灰色图像
plt.rcParams['font.family']='SimHei' #将全局中文字体显示成中文黑体
height=img.shape[0]
width=img.shape[1]
#创建和原始图像相同大小的矩阵
img2=np.zeros((height,width,3),np.uint8)
img3=np.zeros((height,width,3),np.uint8)
img4=np.zeros((height,width,3),np.uint8)
img5=np.zeros((height,width,3),np.uint8)
img6=np.zeros((height,width,3),np.uint8)
img7=np.zeros((height,width,3),np.uint8)
#进行量化
img2=np.uint8(img/4)*4 #这里量化的原理是将img1中每一个像素除4得到其整数部分,原本 256(0-255)个可能的灰度级被缩减到了 64(0-63)个,
#这样在256灰度级下的像素点会有几个在64个灰度级下像素值相同,最后乘4将像素值扩展到原来的像素范围
img3=np.uint8(img/8)*8
img4=np.uint8(img/16)*16
img5=np.uint8(img/32)*32
img6=np.uint8(img/64)*64
img7=np.uint8(img/128)*128
plt.subplot(241)
plt.imshow(img,'gray')
plt.title('原始图像')
plt.axis('off') 

plt.subplot(242)
plt.imshow(img2,'gray')
plt.title('量化为64份')
plt.axis('off')  

plt.subplot(243)
plt.imshow(img3,'gray')
plt.title('量化为32份')
plt.axis('off') 

plt.subplot(244)
plt.imshow(img4,'gray')
plt.title('量化为16份')
plt.axis('off')  

plt.subplot(245)
plt.imshow(img5,'gray')
plt.title('量化为8份')
plt.axis('off')  

plt.subplot(246)
plt.imshow(img6,'gray')
plt.title('量化为4份')
plt.axis('off')  

plt.subplot(247)
plt.imshow(img6,'gray')
plt.title('量化为2份')
plt.axis('off')  

运行代码后的图片:

        

  • 12
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值