计算机视觉 基本图像处理

直方图/高斯滤波/直方图均衡化

一、直方图

直方图是指图像中所有的像素,按照像素值的大小,统计其出现的频度。在python中可以使用PIL库中的hist(arr, bins)函数,arr: 需要计算直方图的一维数组;bins: 直方图的柱数

from PIL import Image
from pylab import *

# 添加中文字体支持
from matplotlib.font_manager import FontProperties
font=FontProperties(fname=r"c:\windows\fonts\SimSun.ttc", size=13)
img1=array(Image.open("E:/Vision/work1/1.jpg"))

figure()
subplot(121)
axis("off")
title("原始图像",FontProperties=font)
imshow(img1)

subplot(122)
title("原图像直方图",FontProperties=font)
hist(img1.flatten(),256)

show()

运行结果
计算机视觉 基本图像处理_第1张图片

二、高斯滤波

高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,用于图像的降噪。其原理是图像中每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。那要如何分配邻域像素点的权重呢?一般来说,由于图像是连续的,越相邻的像素点关系越大,越疏远的像素点关系越小,所以越相邻的权重越大,反之越小。这种模式类似于正态分布。
计算:
计算机视觉 基本图像处理_第2张图片
由上图可见,较近的像素权重更大。
opencv提供了GaussianBlur函数处理高斯滤波
dst=cv2.GaussianBlur(src,ksize,sigmaX)
src:要处理的原图像
ksize:核大小(N,N),N必须是奇数
sigmaX:X方向方差,控制权重。可以设置为0,会自动根据核的大小计算出来。

代码:

import cv2

img1=cv2.imread("E:/Vision/work1/1.jpg")
r=cv2.GaussianBlur(img1,(3,3),0)
cv2.imshow("original",img1)
cv2.imshow("result",r)
cv2.waitKey()

运行结果:
核大小为3*3
计算机视觉 基本图像处理_第3张图片

核大小为15*15,可见核越大,图像越模糊
计算机视觉 基本图像处理_第4张图片

三、直方图均衡化

直方图均衡化是一种图像增强技术,适用于灰度集中在较窄区间、动态范围偏小的图像。基本原理是对图像中像素较多的灰度值进行拓宽,像素较小的灰度值进行归并,从而扩大直方图的动态范围,增加对比度。原图像中直方图的像素分布如果分布不均匀,经均衡化后直方图会变成均匀分布的形式,使图像更清晰。

代码:

from PIL import Image
from pylab import *
from PCV.tools import imtools

from matplotlib.font_manager import FontProperties
font=FontProperties(fname=r"c:\windows\fonts\SimSun.ttc", size=13)

img1=array(Image.open("E:/Vision/work1/2.jpg").convert('L'))
img2,cdf=imtools.histeq(img1)

figure()
subplot(221)
axis("off")
gray()
title("原始图像",FontProperties=font)
imshow(img1)

subplot(222)
title("原图像直方图",FontProperties=font)
hist(img1.flatten(),256)

subplot(223)
axis("off")
title("均衡化后的灰度图像",FontProperties=font)
imshow(img2)

subplot(224)
title("均衡化图像的直方图",FontProperties=font)
hist(img2.flatten(),256)

show()

运行结果:
计算机视觉 基本图像处理_第5张图片

你可能感兴趣的:(计算机视觉 基本图像处理)