计算机视觉——图像处理基础章节内容(作业一)

文章目录

  • 一、直方图
    • 1.基本原理
    • 2.通过Python绘制直方图
  • 二、直方图均衡化
    • 1.基本原理
    • 2.直方图均衡化的实现
  • 三、高斯滤波
    • 1.基本原理
    • 2.高斯滤波的实现


一、直方图

1.基本原理

直方图是图像像素灰度级的统计数目的直观表示。
数字图像的数字化过程中,通过采样将图像离散化为一个个像素,经过量化后,将像素的值(既灰度值)从连续量离散化为整数值。以uint8(无符号8比特整数)类的像素值为例,像素的灰度值的范围为[0,255]区间的整数。通过统计每个灰度值像元的个数,生成直方图,有利于分析图像的性质,以便于后续的图像处理工作。
图像经过数字化后,可得到矩阵如下:
计算机视觉——图像处理基础章节内容(作业一)_第1张图片
矩阵中的每一个元素有着对应的像元,包含像元的灰度值信息。本次实验处理uint8类的像素值,编程统计图像的直方图可以通过如下思路实现:
遍历矩阵中的像元,检查像元的灰度值,设灰度值[0,255]中每个灰度值都有个记数位,初始化位0,如果遍历到的像元的灰度值x∈[0,255),则对应记数位+1。

2.通过Python绘制直方图

通过调用PIL图像类库以及pylab模块绘制直方图。
代码编写:

from PIL import Image
from pylab import *

if __name__=='__main__':
    im = array(Image.open('/Users/leisikai/Desktop/照片/lbxx.png').convert('L'))
    
    figure()
    hist(im.flatten(),128)
    show()

原图及代码运行效果:

计算机视觉——图像处理基础章节内容(作业一)_第2张图片

二、直方图均衡化

1.基本原理

概念:图像的灰度直方图描述了图像中灰度分布情况,而直方图均衡化则是对图像进行非线性拉伸,重新分配图像的灰度值,使一定范围内图像的灰度值大致相等。这样,原来直方图中间的峰值部分对比度得到增强,而两侧的谷底部分对比度降低,输出图像的直方图是一个较为平坦的直方图。
直观概念是对在图像中像素个数多的灰度级进行展宽,而对像素个数少的个数的灰度级进行缩减。从而达到增强图像的目的。
基本方法:通过灰度r的概率密度函数 p ( r ) p(r) p(r),求出灰度变换 T ( r ) T(r) T(r),建立等值像素出现的次数与结果图像像素值之间的关系。
例:设f、g分别为原图像和均衡化处理后的图像:
1.求出原图f的灰度直方图,设为h,h为一个256维的向量;
2.求出图像f的总体像素个数 N f = m × n N_f=m×n Nf=m×n(m,n分别为图像的长和宽),统计每个灰度级的像素个数;
3.进行归一化处理,计算每个灰度级的像素在整个图像中所占的百分比 h s hs hs
h s ( i ) = h ( i ) / N f , i = 0 , 1 , … , 255 hs(i)=h(i)/N_f ,i=0,1,…,255 hs(i)=h(i)/Nf,i=0,1,,255
4.计算图像各个灰度级的累积分布 h p hp hp
H p ( i ) = ∑ ( k = 0 ) i ▒ 〖 h ( k ) 〗 , i = 1 , 2 , … , 255 H_p (i)=∑_(k=0)^i▒〖h(k)〗,i=1,2,…,255 Hp(i)=(k=0)ih(k),i=1,2,,255
5.求出新图像g的灰度值
g = 255 × H p ( i ) , i = 1 , 2 , … , 255 g=255×H_p (i),i=1,2,…,255 g=255×Hp(i),i=1,2,,255
g = 0 , i = 0 g=0,i=0 g=0,i=0

2.直方图均衡化的实现

代码如下

from array import array

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

if __name__=='__main__':

    im = array(Image.open('/Users/leisikai/Desktop/照片/lbxx.png').convert('L'))
    im2, cdf = imtools.histeq(im)

    figure()
    subplot(2, 2, 1)
    axis('off')
    gray()
    title('(a)Original Image')
    imshow(im)

    subplot(2, 2, 2)
    axis('off')
    title('(b)Image After Histogram Equalization')
    imshow(im2)

    subplot(2, 2, 3)
    axis('off')
    title('(c)Histogram Of Original Image')
    hist(im.flatten(), 128, density=True)

    subplot(2, 2, 4)
    axis('off')
    title('(d)Histogram After Equalization')
    hist(im2.flatten(), 128, density=True)

    show()

代码运行效果:
计算机视觉——图像处理基础章节内容(作业一)_第3张图片
运行结果可以看出经过均衡化后,图片中比较集中的灰度区间变成全部灰度区间的均匀分布,而均衡化后的图像整体也更加亮了一些,但是均衡化后的图像一些细节缺失。

三、高斯滤波

1.基本原理

高斯滤波是一种线性平滑滤波,适用于消除高斯噪声,广泛应用于图像处理的减噪过程。
通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。
高斯滤波的具体操作是:用一个模板(或称卷积、掩模)扫描图像中的每一个像素,用模板确定的邻域内像素的加权平均灰度值去替代模板中心像素点的值。因此,高斯滤波的代价是使图像变模糊。

2.高斯滤波的实现

代码如下:

from PIL import Image
from pylab import *
from scipy.ndimage import filters
import numpy as np

# 添加中文字体支持
from matplotlib.font_manager import FontProperties
font = FontProperties(fname=r"/System/Library/Fonts/PingFang.ttc", size=14)

# img = array(Image.open('../image/q.jpg').convert('L'))
img = np.array(Image.open('/Users/leisikai/Desktop/照片/lbxx.png'))

figure()
gray()
axis('off')
subplot(1, 4, 1)
axis('off')
title(u'原图', fontproperties=font)
imshow(img)

# 彩色图像分别对三个通道进行模糊
for bi, blur in enumerate([2, 5, 10]):
    img2 = np.zeros(img.shape)
    for i in range(3):
    # gaussian_filter() 高斯滤波函数
        img2[:, :, i] = filters.gaussian_filter(img[:, :, i], blur)
    img2 = np.uint8(img2)
    subplot(1, 4, 2 + bi)
    imNum = str(blur)
    axis('off')
    title(u'标准差为' + imNum, fontproperties=font)
    imshow(img2)

show()

运行效果:
计算机视觉——图像处理基础章节内容(作业一)_第4张图片
运行结果可以直观看出:标准差越大,高斯模糊效果越明显。

你可能感兴趣的:(计算机视觉,python)