python 高斯平滑,直方图均衡化Python

  python 高斯平滑,直方图均衡化Python

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

  测试原始直方图的基本原理,用matplotlib库绘制直方图,用RGB三通道直方图均衡化直方图,用PCV库完成直方图均衡化,用opencv实现高斯滤波。

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

  测试原图

  直方图

  基本原理

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

  matplotlib库的hist函数:历史函数可以帮助绘制直方图。它有许多参数,这里使用了前两个参数:x和bin。x参数表示一维像素数组。如果数组不止一维,可以使用flatten方法将其展平为一维。一般来说,读图是二维矩阵,需要扁平化。bin参数指示要显示直方图的列数。

  假设有一个二维数组img=[[159,120,130],[100,84,92],[168,150,212]]。它的数字代表图像的像素值。展平后,IMG=[159,120,130,100,84,92,168,150,212]。hist函数绘制的直方图如下。横轴表示像素值,纵轴表示像素值的频率。opencv提供的cv2.calcHist()绘制直方图:函数需要传入读取的图片图像;图像的通道,如果是灰度图像通道=0,如果分别是R、G和B通道,则传入0、1和2。

  matplotlib库绘制直方图

  教科书代码

  from pil import image from py lab import * # Resolve中文乱码PLT . RC params[ font . sans-serif ]= sim hei PLT . RC params[ axes . unicode _ MINUS ]=false # Im=array(image . open( head image . JPEG )。convert( l )#打开图像并将其变成灰度图像Print(im)Figure()Subplot(121)Gray()Contour(im,Origin=image) #绘图轴( equal) #自动缩放轴( off) #去除x-y轴上的缩放title(u image outline )plot(122)# flatten()函数可以执行拼合操作并返回一维数组hist(im.flatten(),28)Print(im . flatten())title(u image histogram )PLT . xlim([0,

  RGB三通道直方图

  代码实现

  从matplotlib导入cv2将pyplot作为plt导入

  img=cv2.imread(headimage.jpeg ,1)color=(b , g , r)for i,col in enumerate(color):

  histr=cv2.calcHist([img],[i],None,[256],[0,256])

  plt.plot(histr,color=col)

  plt.xlim([0,256])plt.show()的运行结果

  直方图均衡化

  基本原理

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

  如何均衡化直方图

  ong>:

  

  • 直方图均衡化首先要读取一张图片img,并计算该图片的直方图的值imhist(可以使用histogram函数)。
  • 得到直方图的值后需要计算该直方图的累计直方图cdf(cdf[i]等于imhist[0]到imhist[i]的总和,可以使用cumsum函数直接得到)。
  • 最后就是进行直方图的均衡化,对于图片第i行第j列的像素值img[i, j],利用公式 img[i, j] = cdf[ img[i,j] ] / (m*n)*255进行计算,得到均衡化后的像素值,然后再计算均衡化后的图片的直方图,就得到均衡化后的直方图
使用PCV库的histeq函数均衡化:传入图像im,返回均衡化后的直方图和累计直方图cdf。

  PCV库完成直方图均衡化

  课本代码

  

# -*- coding: utf-8 -*-from PIL import Imagefrom pylab import *from PCV.tools import imtools# 添加中文字体支持from matplotlib.font_manager import FontProperties

  font = FontProperties(fname=r"c:\windows\fonts\SimSun.ttc", size=14)im = array(Image.open('tire.jpg').convert('L')) # 打开图像,并转成灰度图像im2, cdf = imtools.histeq(im)figure()subplot(2, 2, 1)axis('off')gray()title(u'原始图像', fontproperties=font)imshow(im)subplot(2, 2, 2)axis('off')title(u'直方图均衡化后的图像', fontproperties=font)imshow(im2)subplot(2, 2, 3)axis('off')title(u'原始直方图', fontproperties=font)hist(im.flatten(), 128, density=True)subplot(2, 2, 4)axis('off')title(u'均衡化后的直方图', fontproperties=font)hist(im2.flatten(), 128, density=True)show()

运行结果

通过运行结果可以得到,因为原图像整体较暗(黑),是的原图像的直方图在低像素上出现的频率较高,高像素的频率低。通过直方图均衡化后,图像整体变亮,观察直方图发现低像素的频率有所降低,而高像素的频率升高,使得图像有了更明显的对比度

  高斯滤波

  基本原理

  什么是高斯滤波:高斯滤波是一种线性平滑滤波,它将正太分布用于图像处理,适用于消除高斯噪声,能够对图片进行模糊处理,使图像变得平滑,使图片产生模糊的效果。

  高斯滤波原理:高斯滤波是用户指定一个模板,然后通过这个模板对图像进行卷积,所进行的卷积操作就是将模板中心周围的像素值进行加权平均后替换模板中心的像素值

  opencv高斯滤波实现

  代码实现

  

import cv2import matplotlib.pyplot as plt

  im=cv2.imread("tire.jpg")# 高斯滤波img_Guassian = cv2.GaussianBlur(im,(5,5),0)plt.subplot(121)plt.imshow(im)plt.subplot(122)plt.imshow(img_Guassian)plt.show()

运行结果

从运行结果中可以看出,经过高斯滤波后的图像变得模糊了,边缘变得没有那么明显,图像变得平滑

  

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

  

以上就是Python作业:直方图、均衡化、高斯滤波的详细内容,更多请关注盛行IT软件开发工作室其它相关文章!

  

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: