赞
踩
目录
1>直方图是对数据进行统计的一种方法,并且将统计值组织到一系列实现定义好的bin(直条/组距)当中。bin的数值可以是梯度、方向、色彩或任何其他特征。
2>图像直方图(Image Histogram)是用以表示数字图像中亮度分布的直方图,标绘了图像中每个亮度值的像素个数。其横坐标的左侧为较暗的区域,而右侧为较亮的区域。因此一张较暗图片的直方图中的数据多集中于左侧和中间部分,而整体明亮、只有少量阴影的图像则相反。
注意: 直方图是根据灰度图进行绘制的,而不是彩色图像,
1>dims:需要统计的特征数,dims=1指只统计了灰度值
2>bins:每个特征空间的子区段的数目
3>range:要统计的特征取值范围
1.使用OpenCV中的方法统计直方图,再使用matplotlib进行绘制
cv.calcHist(images,channels,mask,histSize,ranges[,hist[,accumulate]])
参数:
1>images:原图像,当传入函数时[img]形式进行表示
2>channels:如果输入图像是灰度图,它的值就是[0]; 如果是彩色图像,传入的参数可以是[0],[1],[2]它们分别对应着通道B, G, R.
3>mask: 掩模图像,要统计整幅图像的直方图就把它设为None,若统计图像某一部分的直方图的话,需要制作一个掩膜图像4> histSize:bin的数目,[256]形式进行表示
5>ranges: 像素值范围,通常为[0, 256]
2.示例:
- import numpy as np
- import cv2 as cv
- import matplotlib.pyplot as plt
- img=cv.imread('cat.png',0)
- #显示灰度图
- #plt.imshow(img,cmap=plt.cm.gray)
- #plt.show()
- #统计直方图
- hist=cv.calcHist([img],[0],None,[256],[0,256])
- #绘制直方图
- plt.figure(figsize=(10,8))
- plt.plot(hist)
- plt.show()


1.什么是掩膜:掩膜是用选定的图像、图形或物体,对要处理的图像进行遮挡,来控制图像处理的区域,在数字图像处理中,通常使用二维矩阵进行掩膜,掩膜是由0和1组成的一个二进制图像,利用该掩膜对要处理的图像进行掩膜,其中值为1的区域被处理,0区域被屏蔽,不会处理
2.掩膜的作用:我们使用cv.calcHist()查找完整图像的直方图,当要查找图像某些区域的直方图,只需要在查找直方图的区域上创建一个白色的掩膜图像,否则创建黑色,将其作为掩码mask传递
3.示例:
- import numpy as np
- import cv2 as cv
- import matplotlib.pyplot as plt
- img=cv.imread('cat.png',0)
- #plt.imshow(img,cmap=plt.cm.gray)
- #plt.show()
- #创建掩膜模板数据
- mask=np.zeros(img.shape[:2],np.uint8)
- #感兴趣设置成白色
- mask[0:200,200:300]=1
- #plt.imshow(mask,cmap=plt.cm.gray)
- #plt.show()
- #将掩膜与原图像进行与操作
-
- mask_img=cv.bitwise_and(img,img,mask=mask)
- plt.imshow(mask_img,cmap=plt.cm.gray)
- plt.show()





1.概念描述:如果一幅图像整体很亮,那所有的像素值的取值个数应该都会很高。需要将此图像的直方图做一个横向拉伸,就可以扩大图像像素值的分布范围,提高图像的对比度,这就是直方图均衡化,在X光图像中使用广泛,可以提高骨架结构的显示,另外在曝光过度或不足的图像中可以更好的突出细节。
2.API:
dst=cv.equalizeHist(img)#输出结果就是均衡化的直方图
3.示例:
- import numpy as np
- import cv2 as cv
- import matplotlib.pyplot as plt
- img=cv.imread('cat.png',0)
- #plt.imshow(img,cmap=plt.cm.gray)
- #plt.show()
- dst=cv.equalizeHist(img)
- plt.imshow(dst,cmap=plt.cm.gray)
- plt.show()


1.描述:
直方图均衡化中,考虑的是图像全局的对比度,许多情况下,会由于均衡化而丢失许多信息,为了解决此问题,需要使用自适应的直方图均衡化,此时,整幅图片被分成许多小块,称为tiles(在OpenCV中tiles的大小默认是8x8),然后再对每一个小块分别进行直方图均衡化。如果有噪声的话,噪声会被放大。为了避免这种情况的出现要使用对比度限制。对于每个小块来说,如果直方图中的bin超过对比度的上限的话,就把其中的像素点均匀分散到其他bins中,然后在进行直方图均衡化。最后使用双线性差值,对每一小块进行拼接
2.API:
cv.createCLAHE(clipLimit,tileGridSize)
参数:
clipLimit:对比度限制,默认是40
tileGridSize:分块的大小,默认8*8
3.示例:
- import numpy as np
- import matplotlib.pyplot as plt
- import cv2 as cv
- img=cv.imread('cat.png',0)
- #创建一个自适应均衡化对象
- cl=cv.createCLAHE(2.0,(8,8))
- #将其应用于图像
- clahe=cl.apply(img)
- plt.imshow(clahe,cmap=plt.cm.gray)
- plt.show()


Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。