Python如何实现直方图,均衡化,高斯滤波

  

这篇文章将为大家详细讲解有关Python如何实现直方图、均衡化、高斯滤波,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

Python直方图、均衡化、高斯滤波

  • 测试原图

  • 直方图


    • 基本原理

    • matplotlib库绘制直方图

    • RGB三通道直方图

  • 直方图均衡化


    • 基本原理

    • PCV库完成直方图均衡化

  • 高斯滤波


    • 基本原理

    • opencv高斯滤波实现

(免费学习推荐:python视频教程

测试原图

Python如何实现直方图、均衡化、高斯滤波

Python如何实现直方图、均衡化、高斯滤波

直方图

基本原理

什么是直方图:图像的直方图描述图像的灰度级和对应灰度级在图像中出现的次数(频率)的关系,通过直方图可以进行图像分割、检索、分类等操作

matplotlib库的hist函数:hist函数能够帮助绘制直方图。它的参数很多,这里用到前两个参数:x、bins。x参数表示一个像素的一维数组,如果是一维以上的数组可以使用flatten方法展平成一维,一般来说读入一幅图片都是一个二维的矩阵,都需要进行展平的操作。bins参数表示要显示直方图的柱数

假设有一个二维数组img=[[159,120,130],[100,84,92],[168,150,212]]。其数字表示图像的像素值,展平后img=[159,120,130,100,84,92,168,150,212],使用hist函数绘制出的直方图如下图。横轴表示像素值,纵轴表示该像素值出现的频率
Python如何实现直方图、均衡化、高斯滤波
opencv提供的cv2.calcHist()绘制直方图:calcHist函数需要传入读取的图片image;图像的通道channels,如果是灰度图像channels=0,如果分别是r、g、b通道,则传入0、1、2。

matplotlib库绘制直方图

课本代码

from PIL import Imagefrom pylab import *# 解决中文乱码plt.rcParams['font.sans-serif'] = 'SimHei'plt.rcParams['axes.unicode_minus'] = False#im = array(Image.open('headimage.jpeg').convert('L'))  # 打开图像,并转成灰度图像print(im)figure()subplot(121)gray()contour(im, origin='image')  #画图axis('equal')  # 自动调整比例axis('off')  # 去除x  y轴上的刻度title(u'图像轮廓')subplot(122)# flatten()函数可以执行展平操作,返回一个一维数组hist(im.flatten(), 128)print(im.flatten())title(u'图像直方图')plt.xlim([0,260])plt.ylim([0,11000])show()

运行结果
Python如何实现直方图、均衡化、高斯滤波

RGB三通道直方图

代码实现

import cv2from matplotlib import pyplot as plt
  时间=img  cv2.imread (& # 39; headimage.jpeg& # 39;, 1) color =, (& # 39; b # 39; & # 39;舌鳎# 39;,& # 39;" # 39;)for 我,col 拷贝列举(颜色):
  ,,,histr =, cv2.calcHist ([img],[我],[256],[0256])
  ,,,plt.plot (histr color =,坳)
  ,,,plt.xlim ([0256]) plt.show () 

运行结果
 Python如何实现直方图,均衡化,高斯滤波

<强>直方图均衡化

<>强基本原理

<强>什么是直方图均衡化:直方图均衡化是利用图像的直方图对对比度进行调整,是图像增强的一种方法。从图片直观上看,均衡化后的图片对比度更强,更加清晰,特征更加明显,从直方图上看,均衡化后的图片的直方图灰度值出现的频率更加均匀。

<>强如何均衡化直方图:

<李>

直方图均衡化首先要读取一张图片img,并计算该图片的直方图的值imhist(可以使用直方图函数)。

Python如何实现直方图,均衡化,高斯滤波