计算机视觉 Python(一)

本文介绍了计算机视觉中的三个核心概念:直方图的基本原理和代码实现,直方图均衡化及其增强图像对比度的作用,以及高斯滤波的原理和应用。通过实例展示了如何使用Python进行图像处理。
摘要由CSDN通过智能技术生成

1.直方图

1.1基本原理

灰度级范围为[0,L-1]的数字图像的直方图是离散函数h(rk)=nk,其中rk是第k级灰度值,nk是图像中灰度为rk的像素个数。在实践中,经常用乘积MN表示的图像像素的总数除它的每个分量来归一化直方图,通常M和N是图像的行和列的维数。因此,归一化后的直方图由p(rk)=nk/MN给出,其中k=0,1,…,L-1。简单来说,p(rk)是灰度级rk在图像中出现的概率的一个估计。归一化直方图的所有分量之和应等于1。

在直方图中,暗图像集中分布在灰度级的低端;亮图像集中分布在灰度级的高端。低对比度图像具有较窄的直方图,且集中于灰度级的中部;高对比度图像的直方图分量则覆盖了很宽的灰度级范围。

1.2代码

from PIL import Image
from pylab import *

if __name__=='__main__':
    im = array(Image.open('qq.jpg'))
    imshow(im)
    title('Original picture')
    figure()
    hist(im.flatten(),350)
    title('Histogram')
    show()
    figure()

1.3运行结果

在这里插入图片描述
在这里插入图片描述

2.直方图均衡化

2.1基本原理

图像灰度变换中一个非常有用的例子就是直方图均衡化。直方图均衡化是指将一幅图像的灰度直方图变平,使变换后的图像中每个灰度值的分布概率都相同。在对图像做进一步处理之前,直方图均衡化通常是对图像灰度值进行归一化的一个非常好 的方法,并且可以增强图像的对比度。

在这种情况下,直方图均衡化的变换函数是图像中像素的累积分布函数(简称cdf,将像素值的范围映射到目标范围的归一化操作)。

如果一副图像的像素占有很多的灰度级而且分布均匀,那么这样的图像往往有高对比度和多变的灰度色调。直方图均衡化就是一种能仅靠输入图像直方图信息自动达到这种效果的变换函数。它的基本思想是对图像中像素个数多的灰度级进行展宽,而对图像中像素个数少的灰度进行压缩,从而扩展取值的动态范围,提高了对比度和灰度色调的变化,使图像更加清晰。

2.2代码

from PIL import Image
from matplotlib.pyplot import figure, subplot, axis, gray, title, imshow, hist, show
from numpy import histogram, interp, array


def histeq(im, nbr_bins=256):
    """对一幅灰度图像进行直方图均衡化"""

    # 计算图像的直方图
    imhist, bins = histogram(im.flatten(), nbr_bins, normed=True)
    cdf = imhist.cumsum()  # 累积分布函数
    cdf = 255 * cdf / cdf[-1]  # 归一化

    # 使用累积分布函数的线性插值,计算新的像素值
    im2 = interp(im.flatten(), bins[:-1], cdf)

    return im2.reshape(im.shape), cdf
im = array(Image.open('1.JPG').convert('L'))
im2, cdf = histeq(im)


gray()
title('(a)Original Image')
imshow(im)

figure()
title('(b)Image After Histogram Equalization')
imshow(im2)

figure()
title('(c)Histogram Of Original Image')
hist(im.flatten(), 128, density=True)

figure()
title('(d)Histogram After Equalization')
hist(im2.flatten(), 128, density=True)

show()

2.3运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.高斯滤波

3.1基本原理

二维高斯模糊,或者说高斯滤波,是图像处理中非常常见的操作。操作的核心是使用一个从高斯分布中采样得到的掩膜,或者叫核,和输入图片中的每个像素及其邻域进行计算,结果保存到输出图片中。假设高斯核窗口尺寸为,高斯分布的标准差为 ,则高斯核可以表示为矩阵的形式
高斯模糊实现原理
类似于均值滤波(用周围像素点的均值最为中心点的像素值),二维高斯函数滤波也是利用某点周围的数值进行高斯模型处理,再将处理的数值作为该点的像素值。
这里二维高斯模型为:
在这里插入图片描述

为了计算出周围高斯函数各个点的权重,设计一个9宫格:
在这里插入图片描述

以坐标值作为(x,y)的坐标值,计算每点的权重值如下(这里σ = 1.5),这样九个点的像素权值取如下:
在这里插入图片描述

为了计算加权平均,必须得使得9个点的和为1,即将所有点都乘以:2.0889268,得到如下权值矩阵:
在这里插入图片描述

3.2代码

from PIL import Image
from numpy import *
from numpy import array, zeros
from scipy.ndimage import filters
from pylab import *

if __name__=='__main__':
    im = array(Image.open('2.JPG').convert('L'))
    gray()
    subplot(2, 2, 1)
    axis('off')
    title('Original Image')
    imshow(im)

    for bi, blur in enumerate([10, 20, 30]):
        im2 = zeros(im.shape)
        im2 = filters.gaussian_filter(im, blur)
        im2 = np.uint8(im2)
        imNum = str(blur)
        subplot(2, 2, 2 + bi)
        axis('off')
        title('GaussVar = ' + imNum)
        imshow(im2)
    show()

3.3运行结果

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值