图像的数字化是将连续的模拟图像转换为计算机课处理的离散数字图像的过程,该过程包括两种操作:采样和量化。采样是图像空间坐标的离散化,决定了图像的空间分辨率。量化是图像响应幅值的离散化,决定了图像的灰度分辨率。采样额量化是将模拟图像转换为数字图像的两个最重要的操作。
图像采样代码:
# 导入所需要的包
from skimage import data,io
from matplotlib import pyplot as plt
#from matplotlib import pylot as plt
import numpy as np
plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
plt.rcParams['axes.unicode_minus']=False
# 载入测试图像
image=io.imread('cat.jpg')
plt.subplot(1,2,1)
plt.imshow(image)
plt.title('原始图片')
print(image.shape) # 显示图像原始大小
print(type(image)) # 显示图像类型
ratio = 5 # 设置采样比率
# 设置采样后的图片大小
image1 = np.zeros((int(image.shape[0] / ratio), int(image.shape[1] / ratio), image.shape[2]), dtype='int32')
# 对图像进遍历
for i in range(image1.shape[0]):
for j in range(image1.shape[1]):
for k in range(image1.shape[2]):
delta = image[i * ratio:(i + 1) * ratio, j * ratio:(j + 1) * ratio, k] # 获取需要采样的图像块
image1[i, j, k] = np.mean(delta) # 计算均值,并存入结果图像
plt.subplot(1,2,2)
plt.imshow(image1)
plt.title('采样后')
plt.savefig('plt.jpg')
plt.show()
图像量化代码:
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 读取原始图像
img = cv2.imread('./cat/cat1.png')
# 获取图像高度和宽度
height = img.shape[0]
width = img.shape[1]
# 创建一幅图像
new_img = 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_img[i, j][k] = np.uint8(gray)
# 显示图像
cv2.imshow("src", img)
cv2.imshow("", new_img)
# 等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()