发布时间:2021-08-04 23:46:30编辑:run阅读(4319)
PIL量化
使用PIL中Image模块的convert()函数进行颜色量化。其中,选定P模式和颜色参数作为可能颜色的最大数目,使用SciPy中的stats模块的signaltonoise()函数来获得图像的信噪比,信噪比是指图像数组的均值除以图像数组的标准差。
from PIL import Image
import matplotlib.pylab as pylab
import numpy as np
def signaltonoise(a, axis=0, ddof=0):
    a = np.asanyarray(a)
    m = a.mean(axis)
    sd = a.std(axis=axis, ddof=ddof)
    return np.where(sd == 0, 0, m/sd)
im = Image.open(r'D:\image_processing\jpgs\ss.jpg')
pylab.figure(figsize=(20,30))
num_colors_list = [1 << n for n in range(8, 0, -1)]
snr_list = []
i = 1
for num_colors in num_colors_list:
    im1 = im.convert('P', palette=Image.ADAPTIVE, colors=num_colors)
    pylab.subplot(4, 2, i), pylab.imshow(im1), pylab.axis('off')
    snr_list.append(signaltonoise(im1))
    pylab.title('Image with # colors = ' + str(num_colors), size=20)
    i += 1
pylab.subplots_adjust(wspace=0.2, hspace=0)
pylab.show()第一帧图:

第二帧图:

可以看到图像质量如何随着颜色量化变小而降低,这是因为要存储一个像素的比特数减少了。
颜色量化与图像信噪比之间关系的图形,通常这是图像质量的一种度量方法,信噪比越高,图像质量越好。
 51250
 50685
 41286
 38107
 32571
 29471
 28333
 23196
 23160
 21488
 1564°
 2284°
 1890°
 1829°
 2142°
 1876°
 2565°
 4298°
 4150°
 2959°