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

      和上文说的一样,使用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关系可能不能直接使用代码,但是对于采样和量化间隔这个输入,我建议大家别和我一样图方便做个输入框而且还没有做异常处理,做成一个滚动条就挺好了。

    以下是效果图:

    原图:

数字图像处理之采样和量化_第1张图片


    采样间隔比较小的图:


数字图像处理之采样和量化_第2张图片


    采样间隔适中的图:


 数字图像处理之采样和量化_第3张图片


    采样间隔较大的图:


  数字图像处理之采样和量化_第4张图片


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


    量化间隔比较小的图:


数字图像处理之采样和量化_第5张图片


    量化间隔适中的图:


数字图像处理之采样和量化_第6张图片


    量化间隔较大的图:


数字图像处理之采样和量化_第7张图片


    owari

 


你可能感兴趣的:(数字图像)