数字图像处理之采样和量化

来源:互联网 发布:网络监控的组成 编辑:程序博客网 时间:2024/06/16 09:16

      和上文说的一样,使用Python实现。

      采样和量化我就不多做叙述了,下面我就讲讲如何实现采样和量化。

      对于采样,就是图像中一块区域的像素点取样为一个像素块。而对于这个像素块的(R,G,B)值,通常是取这个像素块中所有像素点的平均值来得到的,而为了方便实现,我使用了这个像素块左上角的那个点作为这个像素块的(R,G,B)值。

     采样:

#采样def sampling():    global samplingImage    x = int(samplingText.get())    h,w = greyyedImage.size    samplingImage = Image.new('L',(h,w))    opix = greyyedImage.load()    npix = samplingImage.load()    for i in range (h):        for j in range (w):            npix[i,j] = opix[i - i % x,j - j % x]    showPicture(samplingImage , newCanvas)    histogram(samplingImage , newHisCanvas)

    量化:

#量化 def quantization():    global quantizationImage    m = int(quantizationText.get())    h,w = samplingImage.size    quantizationImage = Image.new('L' , (h , w))    opix = samplingImage.load()    npix = quantizationImage.load()    for i in range (h):        for j in range (w):            npix[i,j] = int((opix[i, j] * m / 256) * 256 / (m - 1))    showPicture(quantizationImage , newCanvas)    histogram(quantizationImage , newHisCanvas)

    其实采样的X和量化的M表示以x * x或m * m的像素点作为像素块,就是采样和量化间隔。又由于我的UI关系可能不能直接使用代码,但是对于采样和量化间隔这个输入,我建议大家别和我一样图方便做个输入框而且还没有做异常处理,做成一个滚动条就挺好了。

    以下是效果图:

    原图:


    采样间隔比较小的图:



    采样间隔适中的图:


 


    采样间隔较大的图:


 


    量化都是基于第一章采样图做的


    量化间隔比较小的图:



    量化间隔适中的图:



    量化间隔较大的图:



    owari