【论文阅读】An efficient and robust line segment matching approach based on LBD descriptor

本文详细介绍了LBD算法如何通过EDLine和高斯金字塔提取线段,利用梯度和权值计算LBD描述子,以及其在匹配过程中的旋转、长度筛选和几何关系融合。重点讲解了利用特征增强理论理解匹配策略,并展示了完整的匹配流程和特征向量的应用。

一、线段的提取和描述

在LBD的论文中,线段的提取依然是使用EDLine算法,但是在此基础上,增加了一个高斯金字塔。论文使用了一个没有内层的高斯金字塔,一般是五层,通过高斯模糊,逐层处理,之后对每一层使用EDLine算法提取线,提取出来的线利用边上像素的梯度来确定一个方向,边上所有像素的平均梯度所指向的方向,就是线的左侧指向右侧。

之后,将高斯金字塔中不同层的线整合到一起。所谓整合到一起,就是将同一条线在不同层上的表现整合在一起,为了方便叙述,将高斯金字塔最底层的一条线在其他层提取到的结果称为子线,那么整合这一步,实际上就是将线和子线放在一起,因为提取的时候是在高斯金字塔上不同层进行的,所以相当于要将子线对齐到线上。
在这里插入图片描述
从代码运行的结果来看,上面这张图实际上是理想情况,我在运行代码的时候,将每一层的子线数目都打印了一下,到高斯金字塔第五层的时候,由于进行了五次高斯模糊,所以图片的清晰程度已经很低了,提取出的线的数目大概是第一层的五分之一,也就是说,如果第一层有100条,第五层就只有20条,那么按照上图所示,在匹配完全成功的情况下,最多也就只有20个LineVec的大小为5,如果子线没有匹配的情况,LineVec的数目根本就没多少。
为了方便叙述,我们将子线分配的过程称为层间匹配,在层间匹配的过程中,代码的写法也比较难理解,假设一条线l在第一层为l1在第二层为l2,代码的写法上认为,如果这两线不匹配,那就是完全不相干的两条线,就是说如果因为EDLine算法的计算误差,导致l1和l2的偏差有些大,超过了匹配的阈值,这两条线完全就认为是两条线,会被分配独自的一个ID进行后续的处理。
这一点根据和师兄的讨论,觉得用特征增强的理论去解释更好理解,使用高斯金字塔,本身是一个描述远距离观察的过程,增加层数,相当于增加了观察者到图像的距离,提取出来的特征一方面看属于金字塔的不同层,但实际上还是图像的一个特征,所以,即使不匹配,也依然是图像的特征的一部分。

其实这

Robust online spectrum prediction with incomplete and corrupted historical observations”直译为“在不完整和损坏的历史观测数据情况下进行稳健在线频谱预测”。 在实际的频谱预测场景中,历史观测数据可能会因为各种原因(如传感器故障、通信干扰、数据存储错误等)出现不完整或者损坏的情况。而稳健的在线频谱预测方法旨在即使在这些不利条件下,仍然能够准确、可靠地对频谱进行预测。 通常,这类研究可能会涉及到使用一些先进的信号处理技术、机器学习算法来处理不完整和损坏的数据。例如,可能会采用数据插补技术来填补缺失的数据,使用异常检测和数据清洗方法来处理损坏的数据;在预测算法方面,可能会使用递归神经网络(RNN)及其变体(如LSTM、GRU)等能够处理序列数据的模型,并且结合一些正则化方法来提高模型的稳健性。 ```python # 以下是一个简单的使用LSTM进行时间序列预测的示例代码 import numpy as np import pandas as pd from keras.models import Sequential from keras.layers import LSTM, Dense # 假设这是处理好的频谱数据 data = np.random.rand(100, 1) # 划分训练集和测试集 train_size = int(len(data) * 0.8) train_data = data[:train_size] test_data = data[train_size:] # 准备训练数据 def create_dataset(dataset, look_back=1): dataX, dataY = [], [] for i in range(len(dataset)-look_back-1): a = dataset[i:(i+look_back), 0] dataX.append(a) dataY.append(dataset[i + look_back, 0]) return np.array(dataX), np.array(dataY) look_back = 3 trainX, trainY = create_dataset(train_data, look_back) testX, testY = create_dataset(test_data, look_back) # 调整输入数据的形状以适应LSTM模型 [样本数, 时间步长, 特征数] trainX = np.reshape(trainX, (trainX.shape[0], trainX.shape[1], 1)) testX = np.reshape(testX, (testX.shape[0], testX.shape[1], 1)) # 创建LSTM模型 model = Sequential() model.add(LSTM(50, input_shape=(look_back, 1))) model.add(Dense(1)) model.compile(loss='mean_squared_error', optimizer='adam') # 训练模型 model.fit(trainX, trainY, epochs=100, batch_size=1, verbose=2) # 进行预测 trainPredict = model.predict(trainX) testPredict = model.predict(testX) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ayakanoinu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值