图像高斯滤波python_Python图像处理--直方图,高斯滤波,直方图均衡化

代码如下:

1 from PIL importImage2 from pylab import *

3 #读取图像到数组

4 im=array(Image.open('11.JPG').convert('L'))5 #新建一个图像

6 figure()7 #不使用颜色信息

8 gray()9 #在原点的左上角显示轮廓图像

10 contour(im,origin='image')11 axis('equal')12 axis('off')13 figure()14 hist(im.flatten(),128)15 show()

效果:

1284884-20200222150813360-1345770915.png

原图

1284884-20200222145906199-1904113964.png

轮廓图

1284884-20200222150213116-772171493.png

直方图

三,高斯滤波

高斯滤波是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。其滤波核的值由如下公式得到(用当前点与中心点的欧式距离的平方代替下面的

(x2+y2):

1284884-20200222151622590-1962162776.png

代码如下:

1 importcv22 importnumpy as np3 importmatplotlib.pyplot as plt4

5 #读取图片

6 img = cv2.imread('11.JPG')7 source =cv2.cvtColor(img,cv2.COLOR_BGR2RGB)8

9 #高斯滤波,这里使用15*15的卷积核

10 result = cv2.GaussianBlur(source, (15,15), 0)11

12 #显示图形

13 titles = ['Source Image', 'GaussianBlur Image']14 images =[source, result]15 for i in range(2):16 plt.subplot(1,2,i+1), plt.imshow(images[i], 'gray')17 plt.title(titles[i])18 plt.xticks([]),plt.yticks([])19 plt.show()

效果:

1284884-20200222152358719-695350716.png

四,直方图均衡化

图像灰度变换中一个非常有用的例子就是直方图均衡化。直方图均衡化是指将一幅图像的灰度直方图变平,使变换后的图像中每个灰度值的分布概率都相同。在对图像做进一步处理之前,直方图均衡化通常是对图像灰度值进行归一化的一个非常好的方法,并且可以增强图像的对比度。在这种情况下,直方图均衡化的变换函数是图像中像素值的累积分布函数(cumulative distribution function,简写为 cdf,将像素值的范围映射到目标范围的归一化操作)。

代码:

1 import cv2 #仅用于读取图像矩阵

2 importmatplotlib.pyplot as plt3 importnumpy as np4 from PIL importImage5 gray_level = 256 #灰度级

6

7

8 defpixel_probability(img):9 """

10 计算像素值出现概率11 :param img:12 :return:13 """

14 assertisinstance(img, np.ndarray)15

16 prob = np.zeros(shape=(256))17

18 for rv inimg:19 for cv inrv:20 prob[cv] += 1

21

22 r, c =img.shape23 prob = prob / (r *c)24

25 returnprob26

27

28 defprobability_to_histogram(img, prob):29 """

30 根据像素概率将原始图像直方图均衡化31 :param img:32 :param prob:33 :return: 直方图均衡化后的图像34 """

35 prob = np.cumsum(prob) #累计概率

36

37 img_map = [int(i * prob[i]) for i in range(256)] #像素值映射

38

39 #像素值替换

40 assertisinstance(img, np.ndarray)41 r, c =img.shape42 for ri inrange(r):43 for ci inrange(c):44 img[ri, ci] =img_map[img[ri, ci]]45

46 returnimg47

48

49 defplot(y, name):50 """

51 画直方图,len(y)==gray_level52 :param y: 概率值53 :param name:54 :return:55 """

56 plt.figure(num=name)57 plt.bar([i for i in range(gray_level)], y, width=1)58

59

60 if __name__ == '__main__':61

62 img=Image.open('11.jpg')63 img=img.convert('L')64 img.save('111.jpg')65 img = cv2.imread("111.jpg", 0) #读取灰度图

66

67 prob =pixel_probability(img)68 plot(prob, "原图直方图")69

70 #直方图均衡化

71 img =probability_to_histogram(img, prob)72 cv2.imwrite("source_hist.jpg", img) #保存图像

73

74 prob =pixel_probability(img)75 plot(prob, "直方图均衡化结果")76

77 plt.show()

效果:

1284884-20200222154532329-1746349401.png

灰度图

1284884-20200222154617593-1231961777.png

均衡化后的图

1284884-20200222150213116-772171493.png

直方图

1284884-20200222154818706-1879158937.png

直方图均衡化

结论:

刚接触Python,对其还不太了解,掌握图像的处理是为接下来的功能实现作基础,希望自己加油。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值