计算机视觉:基本图像处理和处理

1.直方图

1.基本原理

直方图(histogram)是从总体中随机抽取样本,将样本数据加以整理,用于了解数据的分布情况,使我们比较容易直接看到数据的位置状况、离散程度和分布形状的一种常用工具。它是一系列宽度相等、高度不等的长方形来表示数据,其宽度代表组距,高度代表指定组距内的数据数(频数)。

直方图的作用:

  • 直观显示质量特征的分布状态,清晰了解数据的分布形态、中心位置和分散程度;
  • 着眼于数据与规格的关系,将测量值与规格值进行比较,可以判断缺陷是一般缺陷还是异常缺陷,以便人们识别质量改进的地方。 (平均bad代表系统问题,是整个过程的bad;异常bad代表个别离散bad,属于个别问题)
  • 通过对比改进前后的直方图,可以了解均值、离散度、分布形状的变化,以及改进效果如何。

2.实例

(1)原图计算机视觉:基本图像处理和处理
(2)灰度图
计算机视觉:基本图像处理和处理
(3)直方图
计算机视觉:基本图像处理和处理
(4)python源码

#读取图像到数组中
im = array(Image.open('images/vision01.jpg').convert('L'))
#新建一个图像
figure()
#不使用颜色信息
gray()
#在原点左上角显示轮廓图像
contour(im, origin='image')
axis('equal')
axis('off')
figure()
hist(im.flatten(), 128)
show()

2.直方图均衡

1.基本原理

直方图均衡化是指将图像的灰度直方图展平,使变换后的图像中各个灰度值的分布概率相同。直方图均衡化通常是一种非常好的方法,可以在对图像进行进一步处理之前对图像的灰度值进行归一化,增强图像的对比度。
直方图均衡化(Histogram Equalization)是一种增强图像对比度(Image Contrast)的方法,其主要思想是将一副图像的直方图分布变成近似均匀分布,从而增强图像的对比度。

原理分析:假设我们现在有一个图像A,其直方图分布 HA(D) ,我们想利用一个单调非线性映射f : R –> R,将图像A变为图像B,即对图像A中每个 像素点施加f变换 ,图像B的直方图分布为HB(D)。整个过程可以按照以下图示来说明:图中右下方是A图像的灰度直方图分布,图中右上方是单调非线性变换函数f ,左上方式得到的图像B的直方图分布,其中有DB = f(DA), DB + ΔDB = f(DA + ΔDA)。即可以理解f的作用是将A图像里面像素点灰度为DA的全部变为DB,那么则有:
计算机视觉:基本图像处理和处理
上式可以理解为对应区间内的像素总数保持不变。为了实现直方图均衡化,特别是:
计算机视觉:基本图像处理和处理
既然目标是直方图的均匀分布,那么理想的[公式]
,A0是 像素点个数, L是灰度级深度,通常取256。那么得到:
计算机视觉:基本图像处理和处理
那么 ,f就可以求出来了,结果为:
计算机视觉:基本图像处理和处理
离散形式为:
计算机视觉:基本图像处理和处理
计算机视觉:基本图像处理和处理
图:直方图均衡示意图
通过上面推导过程可以看出,映射函数 [公式] 和CDF密切相关。并且,推导过程是在连续分布上作的处理,而实际上图像灰度级别通常是256,故是一种以离散情况近似了连续分布,如果灰度级别足够高的话产生的结果会是真正均匀分布的直方图,由于灰度级只有256,故而实际情况中得到的直方图往往不是均匀分布,而是近似均匀分布的。同时,假若A图像的灰度直方图变化剧烈,且某些灰度区间不存在像素点,这会造成CDF的剧烈变化,那么在灰度区间(x, x+1)内即可能发生剧烈的变化,从而导致最后产生的B图像的直方图也有较大的不均匀性。但是,实际使用过程中,得到的图像能近似均匀分布已经能达到比较好的对比度增强效果了。

2.实例

(1)原图
计算机视觉:基本图像处理和处理
(2)直方图均衡化前后
计算机视觉:基本图像处理和处理
(3)均衡化前后
计算机视觉:基本图像处理和处理
计算机视觉:基本图像处理和处理
(4)python源码

# 计算累计分布函数
def C(rk):
  # 读取图片灰度直方图
  # bins为直方图直方柱的取值向量
  # hist为bins各取值区间上的频数取值
  hist, bins = np.histogram(rk, 256, [0, 256])
  # 计算累计分布函数
  return hist.cumsum()

# 计算灰度均衡化映射
def T(rk):
  cdf = C(rk)
  # 均衡化
  cdf = (cdf - cdf.min()) * (255 - 0) / (cdf.max() - cdf.min()) + 0
  return cdf.astype('uint8')


def histeq():
    # 读取图片
    img = cv.imread('./images/vision01.jpg', 0)
    # 将二维数字图像矩阵转变为一维向量
    rk = img.flatten()

    # 原始图像灰度直方图
    plt.hist(rk, 256, [0, 255], color='r')
    cv.imshow("Before histeq", img)

    # 直方图均衡化
    imgDst = T(rk)[img]
    cv.imshow("After histeq", imgDst)
    plt.hist(imgDst.flatten(), 256, [0, 255], color='b')

    plt.show()

3. 高斯滤波器

1.基本原理

高斯滤波是一种线性滤波器,能够有效抑制噪声,平滑图像。其作用原理和均值滤波器类似,都是取滤波器窗口内的像素的均值作为输出。其窗口模板的系数和均值滤波器不同,均值滤波器的模板系数相同且都为1;而高斯滤波器的模板系数则随着距离模板中心的增大而系数减小。所以高斯滤波器相比于均值滤波器对图像的模糊程度较小。
图像中的大部分噪声属于高斯噪声,因此高斯滤波器被广泛使用。高斯滤波是一种线性平滑滤波器,适用于去除高斯噪声,广泛用于图像去噪。
可以简单理解为高斯滤波去噪就是对整幅图像的像素值进行加权平均。每个像素的值是通过自身值和邻域内其他像素值的加权平均得到的。
高斯滤波的具体操作是:使用用户指定的模板(或卷积、掩码)对图像中的每个像素进行扫描,将模板中心像素替换为模板确定的邻域内像素的加权平均灰度值.的价值 。

高斯函数:
计算机视觉:基本图像处理和处理
注意:σ 的大小决定了高斯函数的宽度。

高斯核
理论上,高斯分布在所有定义域上都有非负值,这就需要一个无限大的卷积核。实际上,仅需要取均值周围3倍标准差内的值,以外部份直接去掉即可。
高斯滤波的两个重要步骤是首先找到高斯模板,然后进行卷积,模板。
举个栗子:
假定中心点的坐标是(0,0),那么取距离它最近的8个点坐标,为了计算,需要设定σ的值。假定σ=1.5,则模糊半径为1的高斯模板就算如下:
计算机视觉:基本图像处理和处理
这个时候我们我们还要确保这九个点加起来为1(这个是高斯模板的特性),这9个点的权重总和等于0.4787147,因此上面9个值还要分别除以0.4787147,得到最终的高斯模板。
计算机视觉:基本图像处理和处理
高斯滤波器计算
假设现有9个像素点,灰度值(0-255)的高斯滤波计算如下:
计算机视觉:基本图像处理和处理
将这9个值加起来,就是中心点的高斯滤波的值。
对所有点重复这个过程,得到高斯模糊图像。

高斯滤波步骤
(1)移动相关核的中心元素,使它位于输入图像待处理像素的正上方
(2)将输入图像的像素值作为权重,乘以相关核
(3)将上面各步得到的结果相加做为输出
简单来说,就是按照高斯分布得到一个高斯模板,然后做卷积和加法的过程。

2.实例

(1)原图
计算机视觉:基本图像处理和处理
(2)σ=2的高斯滤波图像
计算机视觉:基本图像处理和处理
(3)σ=5的高斯滤波图像
计算机视觉:基本图像处理和处理
(4)σ=10的高斯滤波图像
计算机视觉:基本图像处理和处理
(5)python源码

im = array(Image.open('./images/vision01.jpg').convert('L'))
im2 = filters.gaussian_filter(im, 2)
im3 = filters.gaussian_filter(im, 5)
im4 = filters.gaussian_filter(im, 10)
figure()
imshow(im2)
figure()
imshow(im3)
figure()
imshow(im4)
show()

版权声明:本文为博主♚IPROMISE.原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/qq_51667621/article/details/123223598

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2022年3月6日
下一篇 2022年3月6日

相关推荐