计算机视觉——linux下的直方图,直方图均衡化和高斯滤波

实验环境

系统:Ubuntu16.04
语言:python3.6

环境配置

这次实验是在linux的系统下进行的;而Ubuntu是Linux系统中优秀的一个,具体的安装这里就不详述了,类似的教程很多,如果在此处详细讲解又会变成长篇大论,简单来说,本次实验的系统只需要一个Ubuntu的系统并且安装了anconda(非必要)

虚拟环境的搭建(非必要)

linux的命令行操作这里就不详细介绍了,网上同样有大量的教程;这里先建立一个虚拟环境,具体的命令下图所示
在这里插入图片描述
其中建立环境的语句如下

conda create -n cvtest python=3.6

这里的cvtest是环境名,可以自行更改,后面的python版本也可以自行更改;值得一提的是,在创建虚拟环境的这一条语句其实后面还可以添加这个环境自己需要包含的包,但习惯上一般不这么做。

那么什么是虚拟环境呢? 简单来说,虚拟环境相当与在电脑中独立的开辟一个容器,在这个容器内所安装的依赖包与外界互不干扰;当我们同时在进行一些依赖包有交叉的不同项目时(如同时处理和进行两个项目,但tensorflow的版本分别为1.1和2.0),为彼此各自建立虚拟环境可以使得彼此都可以独立准确的运行

事实上,这个实验的环境依赖十分简单,只有一个opencv,不一定需要建虚拟环境,这里这么做只是为了习惯。

opencv的安装

关于opencv的安装,有很多众不同的方式,可以根据自己的系统和环境进行选择;这里只提一种方式,即在Ubuntu下安装了anconda的情况

首先在激活了虚拟环境的情况下输入下列命令

conda install opencv

然后直接等待安装即可。注意,这样的方法默认安装最新版本,如果有版本号需求可以自行在opencv后加上=和版本号。(当然部分版本和部分依赖包不能这样,可以自行查询)

如下图所示
在这里插入图片描述
成功安装完后,可以简单的测试一下,如下图所示:
在这里插入图片描述

直方图和直方图均衡化

注:这部分的原理内容不会详细介绍,在数字图像处理一课中都有解释

直方图:直方图是图像处理过程中的一种非常重要的分析工具。直方图从图像内部灰度级的角度对图像进行表述,包含十分丰富而重要的信息。从直方图的角度对图像进行处理,可以达到增强图像显示效果的目的。

简单来说,直方图是图像内灰度值的统计特性与图像灰度值之间的函数,直方图统计图像内各个灰度级出现的次数。

直方图均衡化:直方图均衡化是一种增强图像对比度的方法,其主要思想是将一副图像的直方图分布通过累积分布函数变成近似均匀分布,从而增强图像的对比度。

高斯滤波

滤波,也即计算机视觉领域常称的卷积;其实也就是符合高斯分布的卷积核。
如下图所示
在这里插入图片描述

代码编写

本节实验的代码十分简单,这是由于opencv这个库提前集成了大量的图像操作,像这次实验中的直方图均衡化和高斯滤波都已经是已经编写好的,只要调用就可以。

linux下的编辑器很多,像VIM等都很好用,这里只展示笔者使用的一种
在这里插入图片描述

import cv2
import matplotlib.pyplot as plt

#图片信息读取,彩色图像灰白化和大学重定义处理
img0 = cv2.imread('/home/huzhizhai/cv/test1.jpg')
#可以不用改变尺寸,这里是因为实验采用手机拍摄图片尺寸过大。
img1 = cv2.resize(img0, dsize = None, fx = 0.2, fy = 0.2)
img2 = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
h, w = img2.shape[:2]
print(h, w)
#展示原图
cv2.namedWindow("W0")
cv2.imshow("W0", img2)

#展示直方图均衡化处理后的图
img3 = cv2.equalizeHist(img2)
cv2.namedWindow("W1")
cv2.imshow("W1", img3)

#展示标准差为0.8的高斯滤波后的图
img4 = cv2.GaussianBlur(img2,(3,3),0.8,0.8)
cv2.namedWindow("W2")
cv2.imshow("W2", img4)

#保存图片
cv2.imwrite('1.jpg',img2)
cv2.imwrite('2.jpg',img3)
cv2.imwrite('3.jpg',img4)

#分别绘制原图和均衡化后的直方图并显示与保存
hist0 = cv2.calcHist([img1], [0], None, [256], [0, 255])
hist1 = cv2.calcHist([img3], [0], None, [256], [0, 255])
plt.subplot(2,1,1)
plt.plot(hist0, color = 'g',label="before",linestyle = '--')
plt.legend()
plt.subplot(2,1,2)
plt.plot(hist1, color = 'r',label="after",linestyle = '--')
plt.legend()
plt.savefig('/home/huzhizhai/cv/result1.jpg')
plt.show()

实验结果与对比

原图如下
在这里插入图片描述
直方图均衡化后图如下
在这里插入图片描述
高斯滤波后图如下
在这里插入图片描述
直方图对比如下
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值