基于OpenCV的直方图匹配

【图像处理】基于OpenCV底层实现的直方图匹配 使用OpenCV库、C++,不使用有关直方图的相关OpenCV函数,底层实现的直方图匹配(直方图规定化)算法。包括算法分析实例与测试图像,绝对是理解此蛋疼算法神器! 阅读详情

点击上方“机器学习算法那些事”,选择加"星标"或“置顶”

重磅干货,第一时间送达

如何为图像生成直方图,如何使直方图相等,最后如何将图像直方图修改为与其他直方图相似。

01. 什么是图像直方图?

在开始定义直方图之前,为简单起见我们先使用灰度图像,稍后再解释彩色图像的处理过程。

图像直方图表示图像的像素分布情况。换言之,图像直方图显示具有特定像素值的图像点数量。例如,假设正常图像的像素强度在0到255之间变化。为了生成其直方图,我们只需要计算像素值为0的像素数量,然后计算1并继续到255即可。在图1中,我们有一个5 * 5的样本图像,我们通过计算每个像素强度的数量来创建直方图表。

图1:生成图像直方图的过程

02. 如何生成图像直方图?

在python中,我们可以使用以下两个函数来创建然后显示图像的直方图。

import matplotlib.pyplot as plt
import numpy as np


def generate_histogram(img, do_print):
    """
    @params: img: can be a grayscale or color image. We calculate the Normalized histogram of this image.
    @params: do_print: if or not print the result histogram
    @return: will return both histogram and the grayscale image 
    """
    if len(img.shape) == 3: # img is colorful, so we convert it to grayscale
        gr_img = np.mean(img, axis=-1)
    else:
        gr_img = img
    '''now we calc grayscale histogram'''
    gr_hist = np.zeros([256])


    for x_pixel in range(gr_img.shape[0]):
        for y_pixel in range(gr_img.shape[1]):
            pixel_value = int(gr_img[x_pixel, y_pixel])
            gr_hist[pixel_value] += 1


    '''normalizing the Histogram'''
    gr_hist /= (gr_img.shape[0] * gr_img.shape[1])
    if do_print:
        print_histogram(gr_hist, name="n_h_img", title="Normalized Histogram")
    return gr_hist, gr_img


  def print_histogram(_histrogram, name, title):
    plt.figure()
    plt.title(title)
    plt.plot(_histrogram, color='#ef476f')
    plt.bar(np.arange(len(_histrogram)), _histrogram, color='#b7b7a4')
    plt.ylabel('Number of Pixels')
    plt.xlabel('Pixel Value')
    plt.savefig("hist_" + name)

代码1:生成直方图

在大多数情况下,当我们创建直方图时,我们通过将每个强度值的像素数除以归一化因子(即图像宽度和图像高度的乘积)来对直方图进行归一化。为了便于使用,如果generate_histogram函数的输入图像是彩色图像,我们首先将其转换为灰度图像(请参见第6行)。

03. 如何均衡图像直方图?

直方图均衡化通常用于增强图像的对比度。因此,该技术不能保证始终提高图像质量。计算CDF(累积分布函数)是均衡图像直方图的常用方法。在图2中,我们计算了在图1中创建的样本图像的CDF。此外,在图3中,我们显示了先前样本的均衡直方图。

图2:计算CDF。

图3:均方图。

为了计算python中的均衡直方图,我们创建了以下代码:

def equalize_histogram(img, histo, L):
    eq_histo = np.zeros_like(histo)
    en_img = np.zeros_like(img)
    for i in range(len(histo)):
        eq_histo[i] = int((L - 1) * np.sum(histo[0:i]))
    print_histogram(eq_histo, name="eq_"+str(index), title="Equalized Histogram")
    '''enhance image as well:'''
    for x_pixel in range(img.shape[0]):
        for y_pixel in range(img.shape[1]):
            pixel_val = int(img[x_pixel, y_pixel])
            en_img[x_pixel, y_pixel] = eq_histo[pixel_val]
    '''creating new histogram'''
    hist_img, _ = generate_histogram(en_img, print=False, index=index)
    print_img(img=en_img, histo_new=hist_img, histo_old=histo, index=str(index), L=L)
    return eq_histo

代码2:均衡直方图

这是我们拍摄的3张不同图片,并用作示例。如图4所示,对于第一个图像,直方图显示低强度像素的数量多于明亮像素。对于第二张图像,情况完全相反,其中较亮像素的密度远大于较暗像素的密度。第三张图片似乎具有半正态直方图。

图4:三种不同类型的图像及其直方图和均等的直方图。

使用均衡直方图增强图像

如前所述,我们可以使用图像的均衡直方图修改图像的对比度。如代码2第12行所示,对于输入图像中的每个像素,我们可以使用其均等值。结果可能比原始图像更好,但不能保证。在图5中,我们描述了3张图像的修改版本。如图所示,使用其均等的直方图修改图像会产生对比度更高的图像。此功能在许多计算机视觉任务中很有用。

图5:使用均衡直方图的对比度修改。最左列是原始图像。中间一栏是对比度修改的结果。

最右边的列是修改后的图像的直方图。

04. 什么是直方图匹配?

假设我们有两个图像,每个图像都有其特定的直方图。因此,我们想在进一步解决此问题之前,是否可以根据另一幅图像的对比度来修改一幅图像?答案是肯定的。实际上,这就是直方图匹配的定义。换句话说,给定图像A和B,可以根据B修改A的对比度。

当我们要统一一组图像的对比度时,直方图匹配非常有用。实际上,直方图均衡也可以视为直方图匹配,因为我们将输入图像的直方图修改为与正态分布相似。

为了匹配图像A和B的直方图,我们需要首先均衡两个图像的直方图。然后,我们需要使用均衡后的直方图将A的每个像素映射到B。然后,我们基于B修改A的每个像素。

让我们使用图6中的以下示例来阐明以上段落。

图6:直方图匹配

在图6中,我们将图像A作为输入图像,将图像B作为目标图像。我们要基于B的分布来修改A的直方图。第一步,我们计算A和B的直方图和均等直方图。然后,我们需要根据该值映射A的每个像素它的均衡直方图求B的值。因此,例如,对于A中强度级别为0的像素,A均衡直方图的对应值为4。现在,我们看一下B均衡直方图并找到强度值对应于4,即0。因此我们将0强度从A映射到0 从B开始。对于A的所有强度值,我们继续进行。如果从A到B的均衡直方图中没有映射,我们只需要选择最接近的值即可。

def find_value_target(val, target_arr):
    key = np.where(target_arr == val)[0]


    if len(key) == 0:
        key = find_value_target(val+1, target_arr)
        if len(key) == 0:
            key = find_value_target(val-1, target_arr)
    vvv = key[0]
    return vvv




def match_histogram(inp_img, hist_input, e_hist_input, e_hist_target, _print=True):
    '''map from e_inp_hist to 'target_hist '''
    en_img = np.zeros_like(inp_img)
    tran_hist = np.zeros_like(e_hist_input)
    for i in range(len(e_hist_input)):
        tran_hist[i] = find_value_target(val=e_hist_input[i], target_arr=e_hist_target)
    print_histogram(tran_hist, name="trans_hist_", title="Transferred Histogram")
    '''enhance image as well:'''
    for x_pixel in range(inp_img.shape[0]):
        for y_pixel in range(inp_img.shape[1]):
            pixel_val = int(inp_img[x_pixel, y_pixel])
            en_img[x_pixel, y_pixel] = tran_hist[pixel_val]
    '''creating new histogram'''
    hist_img, _ = generate_histogram(en_img, print=False, index=3)
    print_img(img=en_img, histo_new=hist_img, histo_old=hist_input, index=str(3), L=L)

代码3: Python中的直方图匹配

图7:直方图匹配示例。我们修改了左图像的直方图以匹配中心图像的直方图。

图7示出了直方图匹配的示例。如大家所见,尽管最左边的图像是明亮的图像,但就对比度级别而言,可以将中心图像视为更好的图像。因此,我们决定使用中心图像的收缩来修改最左边的图像。结果,即最右边的图像已得到改善。

代码链接:https://github.com/aliprf/CV-HistogramMatching

Opencv直方图规定化(直方图匹配) 在某些指定的情况下,需要将直方图映射为指定的分布形式。这就是直方图规定化。不同图像之间的像素数目可能不同,为了使两个图像直方图能够匹配,需要使用概率形式表示每个灰度值在图像像素中所占的比例。在理想状态下,经过直方图匹配操作后,图像直方图的分布形式应与目标分布一致。 上代码: void drawHist(Mat &hist, int type, string name) //归一化并绘制直方图函数 { int hist_w = 512; int hist_h = 400; int wi... 阅读详情

相关推荐

基于OpenCV的颜色直方图模板匹配检测程序实战

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,它包含超过2500个优化算法,这些算法可以用来检测和识别面部、追踪对象、识别颜色、提取3D模型等。OpenCV自2000年由Intel启动,并迅速成为行业标准,广泛应用于学术研究以及工业应用。直方图是图像处理中描述数据分布的一种形式,它展示了一个图像中像素强度的分布情况。具体来说,在颜色直方图中,横轴代表像素强度的可能值,通常是在某个颜色通道的可能值范围内;

weixin_35750483的博客 1063

掌握imgproc组件:opencv-直方图与匹配

opencv3编程入门

m0_50127633的博客 1559

WiFi信道状态信息 基于Intel 5300的CSI Tool 安装及使用(一)

经过半个月的坎坷安装过程,连Windows系统都没装过的本人终于颤颤巍巍把CSI TOOL装好了,下面记录一下适于我所使用设备的安装过程。设备:一台THINKPAD X201,一台师兄借的华硕主板的台式机首先,如果你和我一样对linux其实一窍不通的话,建议先反复看教程里的安装代码,照猫画虎很难一步实现的,中途一定会有这或那的问题需要解决,所以该了解的基础linux指令还是要了解,起码安装过程中的那些指令可以去查一查。.........

Silver_777的博客 2万+

【opencv】教程代码 —Histograms_Matching(2)计算直方图、直方图比较、直方图均衡、模板匹配...

计算直方图直方图比较图像进行直方图均衡化处理模板匹配1.calcHist_Demo.cpp计算直方图这段代码的功能是加载图像,分离图像的三个颜色通道,然后分别计算这三个通道的直方图,绘制出来并显示结果。直方图是图像中像素值分布的图形表示,可以用于图像分析或图像处理中。// 加载OpenCV库,并用cv和std命名空间 #include "opencv2/highgui.hpp" #includ...

cxyhjl的博客 1460

在 Coze 平台工作流开发中,使用图生视频大模型需要时间比较长比如5分钟,如何解决工作流运行超时的问题以及等在视频生成以后再向下走

在 Coze 平台工作流开发中,使用图生视频大模型需要时间比较长比如5分钟,如何解决工作流运行超时的问题以及等在视频生成以后再向下走 同步的比较简单,直接在coze 工作流里面就可以搞定了,也不用写代码之类的

AI懒虫 2358

Windows11配置WSL2支持代理上网

说起来本来这个功能我也不需要的,只是最近突然有个需求就顺便研究了下,WSL2默认的网络方式是NAT,即WSL2的网卡本身是虚拟网卡,通过以太网或WIFI的地址转换来上互联网,我试了下是不能直接走代理的,最近比较忙没具体研究,但是我用另一种方式实现了,下面介绍给需要的人。注意:这个方法只能是WIndows11系统,WIndows10系统上的WSL2缺少了一项功能导致不可用。1、方法总体没什么难度,NAT方式暂时没研究透,后续有时间再研究2、WIndows10系统不支持mirrored,暂时需要另辟蹊径。

jiexijihe945的博客 9592

【opencv】教程代码 —Histograms_Matching(1)反向投影:在给定图像中寻找特定的颜色或颜色分布...

1.calcBackProject_Demo1.cpp反向投影函数的使用/** * @file BackProject_Demo1.cpp * @brief 示例代码,演示反向投影函数的使用 * @author OpenCV团队 */ #include "opencv2/imgproc.hpp" // 包括图像处理相关功能的头文件 #include "opencv2/imgcod...

cxyhjl的博客 716

java零基础从入门到精通(全)

目录前言1. 入门知识1.1 java体系1.2 JDK/JRE/JVM区别1.3 编译与运行理解1.4 类体函数细节2. 标识符 前言 java优势 健壮性(JVM(C++语言写的一个虚拟的计算机)、GC(垃圾回收机制)) 多线程并发 可移植性/跨平台 1. 入门知识 1.1 java体系 JavaSE:标准版 JavaEE:企业版 JavaME:微型版 1.2 JDK/JRE/JVM区别 JVM是不能独立安装的。 JRE和JDK都是可以独立安装的 层层嵌套,jvm包括jdk,jdk包括jre

码农研究僧的博客 6万+

[opencv] 直方图匹配

[opencv][cpp] 直方图均衡化与匹配() 文章目录[opencv][cpp] 直方图均衡化与匹配()1. todo2. todo*. 参考*. 问题解决*. rough 1. todo 2. todo *. 参考 *. 问题解决 *. rough 定义

weixin_37834269的博客 2274

Qualcomm 常用NV列表

^ NV ITEM ^ 功能^^ |NV10 |mode prefer,找网模式|新平台使用NV80000| ^NV74 NV74=0关闭自动接听电话^ |NV240 |NV240=FALSE|EVDO出现网络的问题,此项必须设定为FALSE| |NV255 |CDMA规避网络列表(SID/NID号)| |NV256 |

sdrgtywretyeruet的专栏 5772

YOLOv13涨点改进| CVPR 2026 |独家创新首发、主干改进篇 |利用RIS-PiDiNet主干让YOLOv13更加强大!适合遥感目标检测、小目标检测、旋转目标检测,变化检测,图像分割涨点

🔥本文提出了一种改进的RIS-PiDiNet主干网络,通过引入几何先验构建几何一致性检测器,显著提升了模型在任意方向、结构规则目标场景下的检测性能。包含两个核心模块:S-PDC利用极谐变换的谐波核建模目标结构对称性,RIS-PDC通过SO(2)群平均实现旋转不变性。网络采用基于RIS-block的主干结构并融合轻量级LBP特征,增强了细粒度结构表达能力。实验表明,该方法特别适用于遥感和复杂几何分布场景,能有效提升目标检测的鲁棒性和精度。文章还详细介绍了如何将RIS-PiDiNet集成到YOLOv13框架

Ai缝合怪、助力小伙伴高效发论文 90

【OpenCV】直方图应用:直方图均衡化,直方图匹配,对比直方图

前面介绍了 数字图像灰度直方图,现在来尝试直方图的应用。 直方图均衡化 直方图均衡化(Histogram Equalization)是直方图最典型的应用,是图像点运算的一种。对于一幅输入图像,通过运算产生一幅输出图像,点运算是指输出图像的每个像素点的灰度值由输入像素点决定,即: 直方图均衡化是通过灰度变换将一幅图像转换为另一幅具有均衡直方图,即在每个灰度级上都具有相同的象素点数过程。

小魏的修行路 7万+

戴尔PowerEdge R740服务器安装Debian系统后无法显示磁盘阵列

【代码】戴尔PowerEdge R740服务器安装Debian系统后无法显示磁盘阵列。

路~可以走过 1900

【OpenCV 例程300篇】47. 直方图处理之直方图匹配

直方图均衡直接对图像全局进行均衡化,生成具有均匀直方图的图像,并不考虑局部图像区域的具体情况。对于一幅图像的局部区域、具体缺陷,有时需要生成具有特殊形状直方图的图像。 直方图匹配又称为直方图规定化,是指将图像的直方图调整为规定的形状。 例如,将一幅图像或某一区域的直方图匹配到另一幅影像上,使两幅影像的色调保持一致。 欢迎关注 [『OpenCV 完整例程 100 篇』](https://blog.youkuaiyun.com/youcans/category_11459626.html) 系列...

youcans的博客 1万+

深度学习+遥感:2025最新土地利用分类资源大全(数据集/论文/代码)

近年来,深度学习在遥感影像土地利用分类领域取得了突破性进展,从传统的农田、森林识别,到复杂的城市功能区划分,AI正在重新定义我们对地表覆盖的认知。无论是科研还是工程应用,高质量数据集、前沿算法和开源工具都是成功的关键。本文精心整理了2024年最值得关注的土地利用分类资源,包括:✅ 10+个权威数据集(覆盖全球、多分辨率、多光谱/雷达)✅ 15+篇顶会论文(CNN/Transformer/自监督学习等SOTA方法)✅ 6大开源工具箱(PyTorch/Keras实现,即拿即用)

hanfeng5268的博客 1314

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

OpenCV直方图(直方图、直方图均衡,直方图匹配,原理、实现)

1 直方图 灰度级范围为 [0,L−1][0,L−1][0,L-1] 的数字图像的直方图是离散函数 h(rk)=nkh(rk)=nkh(r_k) = n_k , 其中 rkrkr_k 是第kkk级灰度值,nknkn_k 是图像中灰度为 rkrkr_k 的像素个数。在实践中,经常用乘积 MNMNMN 表示的图像像素的总数除它的每个分量来归一化直方图,通常 MMM 和 NNN 是图像的行和列的位数。...

konglongdanfo的博客 3796

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【OpenCV 例程300篇】48. 直方图处理之彩色直方图匹配

OpenCV 对于彩色图像的直方图匹配,需要对各个颜色通道分别进行运算。 例程 1.60 通过进行彩色图像的直方图匹配,使初始图像 Gaia 的直方图分布,调整到近似模板图像 Lena 的分布,从而具有 Lena 图像的色彩风格。 ...

youcans的博客 7699

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【opencv】第9章 直方图与匹配

直方图广泛运用于很多计算机视觉运用当中,通过标记帧与帧之间显著的边缘和颜色的统计变化,来检测视频中场景的变化。在每个兴趣点设置一个有相近特征的直方图所构成“标签”,用以确定图像中的兴趣点。边缘、色彩、角度等直方图构成了可以被传递给目标识别分类器的一个通用特征类型。色彩和边缘的直方图序列还可以用来识别网络视频是否被复制。如图9.1所示。其实,简单点说,直方图就是对数据进行统计的一种方法,并且将统计值组织到一系列事先定义好的bin当中。

Antonio915的博客 1772

c++ opencv 图像处理:直方图处理(直方图均衡化,直方图匹配(规定化))

文章目录前言一、直方图(histogram)二、直方图处理1.直方图均衡化2.直方图匹配(规定化)3.局部直方图处理4.直方图统计量增强图像三、opencv函数总结 前言 数字图像处理c++ opencv(VS2019 opencv4.53)持续更新 一、直方图(histogram) 非归一化直方图: h(rk)=nkh(r_k)=n_k h(rk​)=nk​ 其中rkr_krk​为图像像素灰度值,比如常见的0-255,nkn_knk​为图像中某一灰度级的像素个数。 归一化直方图: p(rk)=h(r.

刘燚的博客 2万+

OpenCV——直方图与匹配

图像直方图(Histogram)是一种频率分布图,它描述了不同强度值在图像中出现的频率。图像直方图可以统计任何图像特征,如灰度、饱和度、梯度等。彩色图像的亮度直方图就是其灰度图的直方图。亮度直方图考虑了所有颜色通道,但有时也需要对单种颜色通道进行观察分析。计算单种颜色通道直方图时,每种颜色通道都作为一个独立的灰度图像,分别计算其直方图。各种颜色通道的直方图有时近似的,有时则相差甚远,特别是当图像偏于某一色系时。

吴声子夜歌的博客 1546

opencv 直方图_OpenCV 直方图匹配

直方图匹配又称直方图规定化。按照给定的直方图形状调整原先图像的直方图信息。直方图匹配使用到了直方图变换以及均衡化的思想,通过建立映射关系,使期望图像的直方图达到一种特定的形态。直方图匹配的步骤如下:1. 分别计算原图像与目标图像的累计概率分布2. 分别对源图像和目标图像进行直方图均衡化操作3. 利用映射关系使源图像直方图按照规定进行变换示例代码如下:#include <iostream&gt...

weixin_39784774的博客 285

学习OpenCV2 —— 直方图匹配

本文详细介绍了在opencv2中如何进行直方图匹配

Markala的博客 3940

OpenCV学习笔记(九)——直方图的操作(直方图归一化、直方图比较、直方图均衡化、直方图匹配、图像模板匹配cv.matchTemplate())

目录1 直方图归一化2 直方图比较3 直方图均衡化4 直方图匹配5 直方图反向投影6 图像模板匹配 直方图能够反应图像灰度值等统计特性,但是这个结果只统计了数值,是初步统计结果,OpenCV4 可以对统计结果进行进一步的操作以得到更多有用的信息,例如求取同结果的平均概率分布,通过直方图统计结果对两张图像中的内容进行不叫。本文主要介绍直方图归一化、直方图比较、直方图均衡化和直方图匹配等直方图操作与实际应用。 1 直方图归一化 2 直方图比较 3 直方图均衡化 4 直方图匹配 5 直方图反向投影 6 图像模板匹

a1016249126的博客 1万+

OpenCV下直方图匹配图像比较实战

OpenCV下直方图匹配图像比较实战(包含详细的完整的程序和数据)资源-优快云文库 https://download.youkuaiyun.com/download/xiaoxingkongyuxi/89872668。通过比较图像的直方图来衡量图像的相似性。我们将讨论直方图匹配的概念、计算直方图的方法以及常用的相似度度量。通过分析图像的直方图,我们可以了解图像的色彩和亮度分布。直方图匹配是通过比较两个图像的直方图来衡量它们的相似性。通过上述代码,我们可以计算并展示两个图像的直方图,并输出它们之间的相似度度量。

优质创作者: 人工智能技术领域 对于有一定基础的 MATLAB和Python带具体需求都可以详谈 MATLAB和Python可以提供代码调试服务加油 谢谢 你的鼓励是我前行的动力 谢谢支持 加油 谢谢 971

python 直方图匹配_Python OpenCV 直方图匹配

直方图匹配又称为直方图规定化,是指将一幅图像的直方图变成规定形状的直方图而进行的图像增强方法。即将某幅影像或某一区域的直方图匹配到另一幅影像上。将图像的直方图分布规律与待匹配图像的脂肪分布规律近似。下面介绍两种方法:1. 直方图匹配def style_transfer(image, ref):out = np.zeros_like(ref)_, _, ch = image.shapefor i i...

weixin_39683858的博客 978
上一篇: 工业图像异常检测最新研究总结(2019-2020)
下一篇: 如何 Import 自定义的 Python 模块?
机器学习算法那些事
博客等级 码龄9年 1633粉丝 62原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值