直方图

24 OpenCV直方图比较compareHist

*爱你&永不变心* 提交于 2020-02-07 02:21:21
一、直方图比较 对输入的两张图像计算得到直方图H1与H2,归一化到相同的尺度空间,然后可以通过计算H1与H2的之间的距离得到两个直方图的相似程度,进而比较图像本身的相似程度。 Opencv提供的比较方法有四种 Correlation 相关性比较 -(计算结果范围为 -1到1 -1很不相关,1完全一样 ) Chi-Square 卡方比较 -(计算结果越接近0,两个直方图越相似) Intersection 十字交叉性 -(计算公式为取两个直方图每个相同位置的值的最小值,然后求和,这个比较方式不是很好,不建议使用) Bhattacharyya distance 巴氏距离 - (比较结果是很准的,计算结果范围为 0-1 ,0表示两个直方图非常相关,1最不相似) 二、相关性计算(CV_COMP_CORREL) 三、卡方计算(CV_COMP_CHISQR) 四、十字计算(CV_COMP_INTERSECT) 五、巴氏距离计算(CV_COMP_BHATTACHARYYA ) 六、步骤 首先把图像从RGB色彩空间转换到HSV色彩空间 cvtColor 计算图像的直方图,然后归一化到[0~1]之间calcHist和normalize; 使用上述四种比较方法之一进行比较compareHist compareHist ( InputArray h1 , // 直方图数据,下同 InputArray H2

LightGBM介绍及参数调优

倖福魔咒の 提交于 2020-02-06 08:07:18
1、LightGBM简介   LightGBM是一个梯度Boosting框架,使用基于决策树的学习算法。它可以说是分布式的,高效的,有以下优势:   1)更快的训练效率   2)低内存使用   3)更高的准确率   4)支持并行化学习   5)可以处理大规模数据   与常见的机器学习算法对比,速度是非常快的    2、XGboost的缺点   在讨论LightGBM时,不可避免的会提到XGboost,关于XGboost可以参考 此博文   关于XGboost的不足之处主要有:   1)每轮迭代时,都需要遍历整个训练数据多次。如果把整个训练数据装进内存则会限制训练数据的大小;如果不装进内存,反复地读写训练数据又会消耗非常大的时间。   2)预排序方法的时间和空间的消耗都很大 3、LightGBM原理   1)直方图算法   直方图算法的基本思想是先把连续的浮点特征值离散化成kk个整数,同时构造一个宽度为kk的直方图。在遍历数据的时候,根据离散化后的值作为索引在直方图中累积统计量,当遍历一次数据后,直方图累积了需要的统计量,然后根据直方图的离散值,遍历寻找最优的分割点。在XGBoost中需要遍历所有离散化的值,而在这里只要遍历kk个直方图的值。      使用直方图算法有很多优点。首先,最明显就是内存消耗的降低,直方图算法不仅不需要额外存储预排序的结果,而且可以只保存特征离散化后的值。

python+opencv 直方图反向投影

一笑奈何 提交于 2020-02-03 06:59:28
直方图反向投影 1、先把RGB色彩空间转换为HSV色彩空间 2、计算样本的2D直方图 3、对样本直方图作归一化 4、对目标图像作反向投影 import cv2 as cv import numpy as np from matplotlib import pyplot as plt def back_project_demo(): sample = cv.imread('C:/Users/Y/Pictures/Saved Pictures/lena.png') target = cv.imread('C:/Users/Y/Pictures/Saved Pictures/lenanoise.png') roi_hsv = cv.cvtColor(sample, cv.COLOR_BGR2HSV) target_hsv = cv.cvtColor(target, cv.COLOR_BGR2HSV) # show iamges cv.imshow('sample', sample) cv.imshow('target', target) # 计算样本的2D直方图,[0, 1]表示2个通道,[180,256]分别表示两个通道的范围,[0,180,0,256]是固定的值,不用改 # 是HSV两个通道的取值范围 # [180,256]这两个值的数值越大,对像素的划分越精细,图像看起来越不准确

python+opencv 图像直方图(histogram)

和自甴很熟 提交于 2020-02-03 01:49:00
(个人理解,对于RGB图像,每个通道的像素值在0-255之间,共256个值,所以Bin的数目是256。加入图像是14位的,则图像一共有 个像素值。故一个Bin的大小是64,所以统计得到的直方图x轴是0-255,y轴是0-64。) import cv2 as cv import numpy as np from matplotlib import pyplot as plt def plot_demo(image): # ravel把出现的频次都统计出来,范围是0-256 plt.hist(image.ravel(), 256, [0, 256]) plt.show() def image_hist(image): color = ('blue', 'green', 'red') for i, color in enumerate(color): hist = cv.calcHist([image], [i], None, [256], [0, 256]) plt.plot(hist, color=color) plt.xlim([0, 256]) plt.show() src = cv.imread('C:/Users/Y/Pictures/Saved Pictures/demo.png') cv.namedWindow('input image', cv.WINDOW

数字图像处理及应用(期末复习整理)

社会主义新天地 提交于 2020-02-01 17:08:32
一、图像及其类型 图像(image)的定义是: 在一般意义下,一幅图像是一个物体或对象(object)的另一种表示。亦即图像是其所表示物体或对象信息的一个直接描述和浓缩表示。简而言之,即图像是物体在平面坐标上的直观再现。一幅图像包含了所表示物体的描述信息和特征信息,或者说图像是与之对应的物体或抽象的一个真实表示,这个表示可以通过某些技术手段实现。 数字图像处理(digital image processing): 又称为计算机图像处理,它是通过计算机对图像进行去除噪声、增强、变换、复原、分割、特征提取、识别等运算与处理。 图像的分类: 可见图像(visible image): 是指视觉系统可以直接看见的图像,这也是大多数人在日常生活中所见到的和所理解的图像,这一类图像一般通过照像、手工绘制等传统方法获得,通常计算机不能直接处理,但是经过数字化处理后可变为数字图像。 物理图像(physical image): 所反映的是物体的电磁波辐射能,包括可见光和不可见光图像。 数字图像(maths image) :指由连续函数或离散函数生成的抽象图像,其中离散函数所生成的图像就是计算机可以处理的数字图像。 其他相关概念: 计算机图形学(computer graphic): 是指利用计算机技术将概念或数学描述所表示的物体(非实物)图像进行处理和显示的过程。 计算机视觉(computer

数字图像处理(八)——Matlab实现单阈值与多阈值分割

青春壹個敷衍的年華 提交于 2020-02-01 10:30:32
实验内容 对左侧图像进行单阈值、多阈值分割,分别得到右侧的结果。请大家实现这两种方法的分割,对比单阈值与多阈值以及不同阈值的分割效果。 实验一:单阈值分割 方法一:人工阈值选择法: 阈值分割最简单的方法就是人工选择法。基于灰度阈值的分割方法,其关键是如何合理的选择阈值。人工选择方法是通过人眼的观察,应用人对图像的知识,在分析图像直方图的基础上,人工选择出合理的阈值。也可以在人工选择出阈值后,根据分割的效果,不断地进行交互操作,从而选择出最佳的阈值。首先,图像的原图如下: 其次,利用imhist()函数显示出图像的灰度直方图: 通过观察图像灰度直方图可以发现,在150-200之间的灰度值出现很少,而在两边出现了明显的两个高峰,因此根据人工选择阈值法选取183作为图像的阈值分割点,得到的实验效果图如下图所示: 通过观察可以发现人工阈值选择法成功得出了实验效果图,利用灰度直方图的峰谷阈值方法是一种有效且简单的阈值方法,但是该方法有一个局限性,就是要求图像的灰度直方图必须具有双峰型。 方法二:Ostu法: Ostu法是一种使类间方差最大的自动确定阈值的方法,该方法具有简单、处理速度快的特点,是一种常用的阈值选取方法。算法的具体步骤如下: 1、给定一个初始阈值Th,将图像分为C1和C2两类。 2、分别计算出每个灰度值在图像矩阵中的个数,存放在count()矩阵当中。 3

单调栈

我的未来我决定 提交于 2020-01-31 04:50:51
单调栈 一个单调递增(递减)的栈。在题目应用中主要是对栈的 维护 ,通过判断和出入栈操作对栈进行维护,使之保持单调的状态。 维护 判断栈顶元素与数组元素的大小,如果 栈顶元素 < 数组元素 使栈顶元素出栈,如果 栈顶元素 > 数组元素 使数组元素入栈。 一个单调递减栈的例子: 进栈元素分别为3,4,2,6,4,5,2,3 3进栈:(3) 3出栈,4进栈:(4) 2进栈:(4,2) 2出栈,4出栈,6进栈:(6) 4进栈:(6,4) 4出栈,5进栈:(6,5) 2进栈:(6,5,2) 2出栈,3进栈:(6,5,3) 直方图是由在公共基线处对齐的一系列矩形组成的多边形。 矩形具有相等的宽度,但可以具有不同的高度。 例如,图例左侧显示了由高度为2,1,4,5,1,3,3的矩形组成的直方图,矩形的宽度都为1: 题目——直方图中的最大矩形 通常,直方图用于表示离散分布,例如,文本中字符的频率。 现在,请你计算在公共基线处对齐的直方图中最大矩形的面积。 图例右图显示了所描绘直方图的最大对齐矩形。 输入格式 输入包含几个测试用例。 每个测试用例占据一行,用以描述一个直方图,并以整数n开始,表示组成直方图的矩形数目。 然后跟随n个整数h1,…,hn。 这些数字以从左到右的顺序表示直方图的各个矩形的高度。 每个矩形的宽度为1。 同行数字用空格隔开。 当输入用例为n=0时,结束输入,且该用例不用考虑。

opencv python:图像直方图 histogram

别说谁变了你拦得住时间么 提交于 2020-01-29 22:56:34
直接用matplotlib画出直方图 def plot_demo(image): plt.hist(image.ravel(), 256, [0, 256]) # image.ravel()将图像展开,256为bins数量,[0, 256]为范围 plt.show() 图像直方图 def image_hist(image): color = ('blue', 'green', 'red') for i, color in enumerate(color): # 计算出直方图,calcHist(images, channels, mask, histSize(有多少个bin), ranges[, hist[, accumulate]]) -> hist # hist 是一个 256x1 的数组,每一个值代表了与该灰度值对应的像素点数目。 hist = cv.calcHist(image, [i], None, [256], [0, 256]) print(hist.shape) plt.plot(hist, color=color) plt.xlim([0, 256]) plt.show() 直方图均值化 是图像增强的一个手段 def equalHist_demo(image): gray = cv.cvtColor(image,cv.COLOR_BGR2GRAY) #

matplotlib 箱线图 叠加 直方图

跟風遠走 提交于 2020-01-28 10:12:44
matplotlib 箱线图 叠加 直方图 OriginPro 里箱线图叠加直方图很不错,尝试了使用matplotlib达到类似效果 import matplotlib . pyplot as plt import numpy as np ## 借用帮助文件中的数据 # Fixing random state for reproducibility np . random . seed ( 19680801 ) # fake up some data spread = np . random . rand ( 50 ) * 100 center = np . ones ( 25 ) * 50 flier_high = np . random . rand ( 10 ) * 100 + 100 flier_low = np . random . rand ( 10 ) * - 100 data = np . concatenate ( ( spread , center , flier_high , flier_low ) ) fig = plt . figure ( ) # basic plot left , bottom , width , height = 0.1 , 0.1 , 0.8 , 0.8 ax1 = fig . add_axes ( [ left , bottom

有关SQL Server分布统计的问题

痞子三分冷 提交于 2020-01-25 13:59:42
最近常被一些人问到关于SQL Server中统计的问题,这些问题是: 是否需要关注数据库中统计的多少? 统计对象使用多个空间 就执行SQL语句来说,查询优化器使用索引或列的分布统计信息来选择最佳的策略或计划;如果缺少统计信息或统计信息过期,性能会受到影响。在回答这些问题前,需要介绍一些关于分布统计的背景知识:什么是分布统计、其重要性、如何创建、更新、显示或查询。 分布统计的定义 在介绍之前,不得不推荐的一些关于Holger Schmeling写的一系列关于统计的文章,强烈建议仔细阅读,我认为是最有价值的。 简单地说,统计(包含索引或列中的数据分布的一种映射或直方图)用于选取最好的查询执行计划;当系统正常时,你不必担心这些,这么说的原因是他们是自动创建的,随着数据的变化也保持自动更新,如果查询优化器‘编译’查询时,如果没有找到可用的统计来判断表或索引中的数据分布状态,数据库会在需要时自动创建一个,例如当你在WHERE子句中使用列过滤或在某列上进行DISTINCT操作时。 下面我们一起来看一下统计对象的直方图(Histogram),直方图主要衡量数据集中每一个非重复值的发生次数,查询优化器根据统计对象的第一个键列的值计算出一个直方图,通常一个直方图最多有200个值。 查看统计的详细信息,可以使用如下的命令: 1: DBCC SHOW_STATISTICS (Tab1, Stats