
推荐:【OpenCV】直方图应用:直方图均衡化,直方图匹配,对比直方图
2 基于局部精确直方图匹配的无人机景象匹配导航色彩恒常算法 2 基于局部精确直方图匹配的无人机景象匹配导航色彩恒常算法 虽然 ehm 算法能够快速、精确地进行直方图匹配,使原始图像具有与目标图像几乎完全一样的直方图,但是在景象匹配色彩恒常处理过程中,由于基准图和实时图之间不但具有色彩差异,还不可避免地存在着平移、尺度、旋转等差异,直接采用该方法将会严重影响色彩恒常处理的效果并限制景象匹配系统的定位精度。利用图像处理技术,对获取到的视频图像进行灰度化、求直方图、直方图均衡化以及中值滤波预处理。对原图像f(x,y)依次进行直方图均衡化和图像滤波处理,再使用8领域方向链码的方法从背景模板中提取得到全部碎片图像。
2019阿里云全部产品优惠券(新购或升级都可以使用,强烈推荐)
领取地址:https://promotion.aliyun.com/ntms/yunparter/invite.html
将灰度图像通过适当的阈值选取而将图像上的像素点的灰度值设置为0或255,使整个图像呈现出明显的黑白效果,称为图像的二值化,如公式(2)所示:。直方图统计是图像处理算法中最基本和常见的算法之一,主要原理就是将图像中各个灰度级的像素个数进行计算并统计,这在一些对灰度特性进行统计的算法中比较常见。(2)直方图均衡化 数字图像处理中,灰度直方图是一种简单而实用的工具,能概括描绘一幅 图像的灰度分布情况。
img = cv2.imread("0_snap.png" , 0)
img = cv2.imread("home.jpg" , 0)
hist = cv2.calcHist([img],[0],None , [256],[0,256])
print(hist)
#plt.imshow(hist , cmap="gray")
#plt.show(hist)
'''
pyplot.hist(x , bins=10,range=None):
作用:绘制直方图,x表示类似的一维数组(也可以是图像)
'''
plt.hist(img.ravel() , 256 ,[0,256])
plt.show()
'''
cv2.imshow("histogram",hist)
cv2.waitKey(0)
cv2.destroyAllWindows()
'''
'''
numpy.histogram(a,bins=10,range=None)
a:类似数组的输入数据,bins:用于知道两个像素值之间的数目
range:统计的像素范围
返回的hist:数组,bin_edges:length(hist)+1
hist就是一个含有256个元素的数组,数组中的每一个元素表示数组
对应下标下的像素点个数
np.bincount(x,weights=Nne,minlengthNone):
x:一维数组,返回out:输出的包含
'''
int bins = 256。char hist[256]。//resize(img,img,size(256opencv直方图均衡化,256))。
print("hist:%d" % len(hist) )

print(hist)
print("bins:%d" % len(bins))
黑白图像(黑白图像的每个像素不是黑色就是白色,这种图像所占空间最少,。如果称不同深度的颜色为一色的话,灰像就不止只有黑色和白色两种颜色,一般使用灰度图为256级灰度图,就是说图像由256中不同灰度级的颜色组成。图像加入椒盐噪声开始,椒盐噪声其实就是使图像的一些随机的像素为黑色(0)或者白色(255):。
img = cv2.imread("home.jpg" , 0)
mask = np.zeros(img.shape[ : 2 ] , np.uint8)
mask[100:300 , 100:400] = 255
masked_img = cv2.bitwise_and(img , img , mask = mask)
img=cv2.imread('d:/binary.bmp',0)。res = cv2.resize(img,none,fx=2, fy=2, interpolation = cv2.inter_cubic)。//resize(img,img,size(256,256))。
hist_mask = cv2.calcHist([img] , [0] , mask , [256] , [0,256])
plt.subplot(221),plt.imshow(img , "gray")
plt.subplot(222),plt.imshow(mask , "gray")
plt.subplot(223),plt.imshow(masked_img , "gray")
plt.subplot(224),plt.plot(hist_full) , plt.plot(hist_mask)
plt.show()'''直方图均衡化一副图像中大多数店都集中在一个像素值范围内会怎样,如果一副图片很亮,那么像素值都很高,直方图均衡化会把直方图做横向拉伸。直方图均衡化是把直方图映射到广泛分布的直方图中应用:使所有的图片具有相同的亮度条件'''def numpy_historgamEqualization():
#img = cv2.imread("wiki.jpg" , 0)
img = cv2.imread("scenery.jpg" , 0)
'''
numpy.ndarray.flatten(order='C'):扁平化,复制一个一维的array出来
C表示按照行的顺序,F表示按照列的顺序
'''
int bins = 256。char hist[256]。//resize(img,img,size(256,256))。
'''
numpy.cumsum(a,axis=None,dtype=None ,out=None):
a:输入数组
作用:计算每一行或每一列的累积和, 相当于分布求和函数,落在<=a的数量
'''
#计算累积分布图(不是标准化的)
cdf = hist.cumsum()
'''
max():最大值,用分布累积值乘以,直方图最大值/分布累加最大值 ?
标准化的值=cdf/cdf.max( < 1) * hist.max() < 1
'''
cdf_normalized = cdf * hist.max() / cdf.max()
plt.plot(cdf_normalized , color = 'b')

plt.hist(img.flatten() ,256 , [0 , 256] , color = 'r' )
'''
pyplot.xlime( ( xmin,xmax ) ):设置x轴的限制范围
'''
plt.xlim([0,256])
'''
pyplot.legend():为线段设置图例(其实就是解释说明)
'''
plt.legend(("cdf" , "histogram") , loc = "upper left")
plt.show()
'''
找到直方图中的最小值(除了0),并把它用于wiki中的直方图均衡化公式,使用Numpy
的掩膜数组,对于掩膜数组的所有操作都只对n
推荐:opencv2直方图均衡化
#ifndef HISTOGRAM_H_#define HISTOGRAM_H_#include<opencv2/core/core.hpp>#include<opencv2/highgui/highgui.hpp>#include<opencv2/imgproc/imgproc.hpp>
on-masked元素有效
构建Numpy掩膜数组,cdf为原数组,当数组元素为0时,掩盖(计算时被忽略)
numpy.ma.masked_equal(x,value,copy=True):
掩膜一个数组当之等于给定值时
'''
cdf_m = np.ma.masked_equal(cdf , 0)
#真正的归一化
cdf_m = ( cdf_m - cdf_m.min() ) * 255
/ (cdf_m.max() - cdf_m.min() )
'''
numpy.ma.filled
'''
b = np.random.randn(n).astype(np.float32) 。circles = np.round(circles[0, :]).astype("int")。spacing = np.linspace(0, len(file_names), self.num_threads + 1).astype(np.int) 。
img = cv2.imread("scenery.jpg" , 0)
#img = cv2.imread("wiki.jpg" , 0)
#img = cv2.imread("0_snap.png" , 0)
'''
numpy.ndarray.flatten(order='C'):扁平化,复制一个一维的array出来
C表示按照行的顺序,F表示按照列的顺序

'''
hist , bins = np.histogram(img.flatten() , 256 , [0,256])
'''
numpy.cumsum(a,axis=None,dtype=None ,out=None):
a:输入数组
作用:计算每一行或每一列的累积和,相当于分布求和函数,落在<=a的数量
'''
#计算累积分布图(不是标准化的)
cdf = hist.cumsum()
'''
找到直方图中的最小值(除了0),并把它用于wiki中的直方图均衡化公式,使用Numpy
的掩膜数组,对于掩膜数组的所有操作都只对non-masked元素有效
构建Numpy掩膜数组,cdf为原数组,当数组元素为0时,掩盖(计算时被忽略)
numpy.ma.masked_equal(x,value,copy=True):
掩膜一个数组当之等于给定值时
'''
cdf_m = np.ma.masked_equal(cdf , 0)
#真正的归一化
cdf_m = ( cdf_m - cdf_m.min() ) * 255
/ (cdf_m.max() - cdf_m.min() )
'''
numpy.ma.filled
'''
#将变换应用到图片上
cdf = np.ma.filled(cdf_m , 0).astype("uint8")
img2 = cdf[img]
plt.subplot(121) , plt.imshow(img , "gray") , plt.title("original image")
plt.subplot(122) , plt.imshow(img , "gray") , plt.title("historgam equalization")
plt.xlim([0,256])
plt.show()'''opencv中直方图均衡化cv2.euqalizeHist(src[,dst])->dst作用:将输入图像的直方图进行均衡化返回经过直方图处理的图像处理过程:先计算原图像的直方图,然后对直方图进行标准化然后计算每个灰度值的直方图: Hi'=在0<=j<i上对H(j)累积求和将H'转换原图像,即查表: dst(x,y)=H'(src(x,y))'''def opencv_histogramEqualization():
img = cv2.imread("wiki.jpg" , 0)
equ = cv2.equalizeHist(img)
'''
numpy.hstack(tup)

作用:按照列来水平合并矩阵将一行上所有的元素的行合并在一起
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-117992-1.html
这是赤裸裸地干涉别国内政吧