基本的图像操作和处理

一.直方图

直方图是图像处理过程中的一种非常重要的分析工具。直方图从图像内部灰度级的角度对图像进行表述,包含十分丰富而重要的信息。从直方图的角度对图像进行处理,可以达到增强图像显示效果的目的。

from PIL import Image
from pylab import *

"""
函数说明:绘制直方图

Parameters:
    无
Returns:
    无
"""
def Histogram():
    #读取图像到数组中并转换成灰度图像
    img = array(Image.open('123.jpeg').convert('L'))
    #新建一个图像
    figure()
    hist(img.flatten(),128)
    show()
    
if __name__ == '__main__':
    Histogram()

直方图如下:

基本的图像操作和处理_第1张图片

 原图:

基本的图像操作和处理_第2张图片

二.高斯滤波

from PIL import Image 
from pylab import *   
from scipy.ndimage import filters 

"""
函数说明:高斯滤波

Parameters:
    无
Returns:
    无
"""
def Gaussian():
    img = array(Image.open('123.jpeg').convert('L'))

    figure()
    gray()
    axis('off')
    subplot(1, 4, 1)
    axis('off')
    title('原图')
    imshow(img)

    for bi, blur in enumerate([2, 5, 10]):
        img2 = zeros(img.shape)
        img2 = filters.gaussian_filter(img, blur)
        img2 = np.uint8(img2)
        imNum=str(blur)
        subplot(1, 4, 2 + bi)
        axis('off')
        title('标准差为'+imNum)
        imshow(img2)
    show()

if __name__ == '__main__':
    #高斯滤波
    mpl.rcParams['font.sans-serif'] = ['SimHei']
    Gaussian()

 结果如下:

基本的图像操作和处理_第3张图片

三.直方图均衡化

from PIL import Image 
from pylab import *   
from numpy import *   
"""
函数说明:直方图均衡化

Parameters:
    img:灰度图像
    nbr_bins=256:直方图使用小区间的数目
Returns:
    img2.reshape(img.shape):直方图均衡化后的图像
    cdf:用来做像素值映射的累积分布函数
"""
def Histeq(img,nbr_bins=256):
    #计算图像的直方图
    imhist,bins=histogram(img.flatten(),nbr_bins)
    #累计分布函数
    cdf = imhist.cumsum()
    #归一化
    cdf = 255*cdf/cdf[-1]
    #使用累积分布函数的线性插值,计算新的像素值
    img2 = interp(img.flatten(),bins[:-1],cdf)

    return img2.reshape(img.shape),cdf

if __name__ == '__main__':
    #直方图均衡化
    #解决title是方框的问题
    mpl.rcParams['font.sans-serif'] = ['SimHei']
    img = array(Image.open('123.jpeg').convert('L'))
    img2,cdf = Histeq(img)

    figure()
    subplot(2, 2, 1)
    #关闭所有坐标轴线、刻度标记和标签
    axis('off')
    gray()
    title('原始图像')
    imshow(img)

    subplot(2, 2, 2)
    axis('off')
    title('直方图均衡化后的图像')
    imshow(img2)

    subplot(2, 2, 3)
    axis('off')
    title('原始直方图')
    # hist(im.flatten(), 128, cumulative=True, normed=True)
    hist(img.flatten(), 128)

    subplot(2, 2, 4)
    axis('off')
    title('均衡化后的直方图')
    # hist(im2.flatten(), 128, cumulative=True, normed=True)
    hist(img2.flatten(), 128)

    show()

 

你可能感兴趣的:(图像处理,人工智能)