VL_feat 里面一个关于图像拼接的例子

jianminfly jianminfly 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
function mosaic = sift_mosaic(im1, im2)
% SIFT_MOSAIC Demonstrates matching two images using SIFT and RANSAC
%sift_mosaic 示范使用sift和ransan匹配两张图片

% SIFT_MOSAIC demonstrates matching two images based on SIFT
% sift_mosaic 示范基于sift的匹配两张图片

% features and RANSAC and computing their mosaic.
% 特征点和ransac和他们的拼接的计算

% SIFT_MOSAIC by itself runs the algorithm on two standard test
% images. Use SIFT_MOSAIC(IM1,IM2) to compute the mosaic of two
% custom images IM1 and IM2.
% sift_mosaic本身在两个标准图像中运行算法。使用sift_mosaic(im1,im2)来计算两个定制的图像im1和im2
% AUTORIGHTS

if nargin == 0
im1 = imread(fullfile(vl_root, 'data', 'river1.jpg')) ;
im2 = imread(fullfile(vl_root, 'data', 'river2.jpg')) ;
end

% make single
im1 = im2single(im1) ;%将亮度图像转换为单精度图像,有必要时会修改数据
im2 = im2single(im2) ;

% make grayscale制作灰度图
if size(im1,3) > 1, im1g = rgb2gray(im1) ; else im1g = im1 ; end
if size(im2,3) > 1, im2g = rgb2gray(im2) ; else im2g = im2 ; end

% --------------------------------------------------------------------
% SIFT matches
% --------------------------------------------------------------------

[f1,d1] = vl_sift(im1g) ;%图像特征点提取,f1是特征点坐标,d1是对象描述子?
[f2,d2] = vl_sift(im2g) ;

[matches, scores] = vl_ubcmatch(d1,d2) ;%对上述提取的特征点进行匹配

numMatches = size(matches,2) ;%提取出matches的列数

X1 = f1(1:2,matches(1,:)) ; X1(3,:) = 1 ;%?
X2 = f2(1:2,matches(2,:)) ; X2(3,:) = 1 ;

% --------------------------------------------------------------------
% RANSAC with homography单应性 model
% --------------------------------------------------------------------

clear H score ok ;
for t = 1:100 % 迭代100次,每次进行比较,最后选择最佳的H
% estimate homograpyh估计单应性
subset = vl_colsubset(1:numMatches, 4) ;%1~nummatches 取随机四个数
A = [] ;
for i = subset
A = cat(1, A, kron(X1(:,i)', vl_hat(X2(:,i)))) ;%cat(1,A,B)在列方向上拼接矩阵,kron(A,B)表示[A(1,1)*B,A(1,2)*B,...]每个矩阵在行方向上拼接,vl_hat(A)把A变成一个3*3的反对称矩阵
end
[U,S,V] = svd(A) ;%U*S*V'=A
H{t} = reshape(V(:,9),3,3) ;%按列重新组合成3*3的矩阵

% score homography把单应性记下
X2_ = H{t} * X1 ;
du = X2_(1,:)./X2_(3,:) - X2(1,:)./X2(3,:) ;
dv = X2_(2,:)./X2_(3,:) - X2(2,:)./X2(3,:) ;
ok{t} = (du.*du + dv.*dv) < 6*6 ;
score(t) = sum(ok{t}) ;
end

[score1, best] = max(score) ;
H = H{best} ;
ok = ok{best} ;

% --------------------------------------------------------------------
% Optional
% refinement可选择的提纯
% --------------------------------------------------------------------

function err = residual(H)
u = H(1) * X1(1,ok) + H(4) * X1(2,ok) + H(7) ;
v = H(2) * X1(1,ok) + H(5) * X1(2,ok) + H(8) ;
d = H(3) * X1(1,ok) + H(6) * X1(2,ok) + 1 ;
du = X2(1,ok) - u ./ d ;
dv = X2(2,ok) - v ./ d ;
err = sum(du.*du + dv.*dv) ;
end

if exist('fminsearch') == 2
H = H / H(3,3) ;
opts = optimset('Display', 'none', 'TolFun', 1e-8, 'TolX', 1e-8) ;
H(1:8) = fminsearch(@residual, H(1:8)', opts) ;
else
warning('Refinement disabled as fminsearch was not found.') ;
end

% --------------------------------------------------------------------
% Show matches
% --------------------------------------------------------------------

dh1 = max(size(im2,1)-size(im1,1),0) ;
dh2 = max(size(im1,1)-size(im2,1),0) ;

figure(1) ; clf ;
subplot(2,1,1) ;
imagesc([padarray(im1,dh1,'post') padarray(im2,dh2,'post')]) ;
o = size(im1,2) ;
line([f1(1,matches(1,:));f2(1,matches(2,:))+o], ...
[f1(2,matches(1,:));f2(2,matches(2,:))]) ;
title(sprintf('%d tentative matches', numMatches)) ;
axis image off ;

subplot(2,1,2) ;
imagesc([padarray(im1,dh1,'post') padarray(im2,dh2,'post')]) ;
o = size(im1,2) ;
line([f1(1,matches(1,ok));f2(1,matches(2,ok))+o], ...
[f1(2,matches(1,ok));f2(2,matches(2,ok))]) ;
title(sprintf('%d (%.2f%%) inliner matches out of %d', ...
sum(ok), ...
100*sum(ok)/numMatches, ...
numMatches)) ;
axis image off ;

drawnow ;

% --------------------------------------------------------------------
% Mosaic
% --------------------------------------------------------------------

box2 = [1 size(im2,2) size(im2,2) 1 ;
1 1 size(im2,1) size(im2,1) ;
1 1 1 1 ] ;
box2_ = inv(H) * box2 ;
box2_(1,:) = box2_(1,:) ./ box2_(3,:) ;
box2_(2,:) = box2_(2,:) ./ box2_(3,:) ;
ur = min([1 box2_(1,:)]):max([size(im1,2) box2_(1,:)]) ;
vr = min([1 box2_(2,:)]):max([size(im1,1) box2_(2,:)]) ;

[u,v] = meshgrid(ur,vr) ;
im1_ = vl_imwbackward(im2double(im1),u,v) ;

z_ = H(3,1) * u + H(3,2) * v + H(3,3) ;
u_ = (H(1,1) * u + H(1,2) * v + H(1,3)) ./ z_ ;
v_ = (H(2,1) * u + H(2,2) * v + H(2,3)) ./ z_ ;
im2_ = vl_imwbackward(im2double(im2),u_,v_) ;

mass = ~isnan(im1_) + ~isnan(im2_) ;
im1_(isnan(im1_)) = 0 ;
im2_(isnan(im2_)) = 0 ;
mosaic = (im1_ + im2_) ./ mass ;

figure(2) ; clf ;
imagesc(mosaic) ; axis image off ;
title('Mosaic') ;

if nargout == 0, clear mosaic ; end

end

代码就上面这些了,恳请做过这个的大神能把每段算法的详细解释说给我听一下,感激不尽!!!,网上资料好少啊,根本找不到更多的资料
...全文

相关推荐

matlab中vl_feat相关函数功能翻译

学习 vl_feat时候 函数功能的 翻译总结

正在思考中

Mosaic:创建全景图像的算法

马赛克 该项目探索全景拼接技术。 要将一系列图像拼接成全景图, 安装 。 将解压缩到Images文件夹中。 在 MATLAB 命令上,运行 >> close all; clear all; >> imageFolder='Images'; paramFile='data/testParams.txt'; >> runMosaic; translationStitch; 有关更多详细信息,请参阅项目 wiki。

邱笑晨

PylonCode请下载

PylonCode:The pylon inference calls the QPBO algorithm inside it Therefore you need to download the QPBO code version 1 3 from Vladimir Kolmogorov&quot;s website

aasdkjyhiu

蒙古国寺庙shp信息点wgs84.zip

蒙古国寺庙shp信息点wgs84.zip

鸿业远图科技

【电力系统状态估计与PMU(相量测量单元)】使用WLS和PMU来估计系统的电压幅值和角度还将这些值与使用Newton-Raphson方法获得的状态进行比较(Matlab代码实现)

内容概要:本文系统阐述了基于加权最小二乘法(WLS)融合相量测量单元(PMU)量测数据进行电力系统状态估计的理论与实现方法,重点研究了如何利用PMU提供的高精度、高同步性的电压和电流相量信息,构建精确的量测方程,并将其集成到传统的WLS状态估计算法中,以实现对系统节点电压幅值和相角的高精度估计。文中详细描述了WLS-PMU联合估计模型的数学推导过程,包括状态变量定义、量测函数建立、雅可比矩阵计算及迭代求解流程,并通过Matlab编程实现了该算法。研究进一步将WLS-PMU的估计结果与基于传统SCADA量测和牛顿-拉夫森(Newton-Raphson)潮流计算的状态估计结果进行对比分析,通过仿真验证了PMU的引入能显著提升状态估计的精度、收敛速度和抗噪声能力,为现代电力系统的高精度实时监控与安全分析提供了有效的技术手段。; 适合人群:具备电力系统分析、现代控制理论基础,熟悉状态估计、潮流计算原理,并能熟练运用Matlab进行仿真实验的电气工程专业高年级本科生、研究生及从事电力系统自动化、智能电网相关领域的科研人员和技术工程师。; 使用场景及目标:① 掌握融合PMU量测的WLS状态估计模型的完整构建方法与理论依据;② 学习并掌握在Matlab环境中实现WLS算法及Newton-Raphson潮流计算的具体编程技巧与仿真流程;③ 通过定量对比分析,深入理解PMU在提升电网可观测性、增强状态估计鲁棒性方面的核心价值与技术优势。; 阅读建议:建议读者在阅读时紧密结合所提供的Matlab代码,逐行分析算法实现细节,特别是PMU量测方程的处理、权重矩阵的设定以及WLS迭代过程的逻辑。鼓励通过修改系统参数(如网络拓扑、PMU配置数量与位置)、引入不同程度的量测噪声等方式进行扩展性仿真实验,以直观感受不同因素对估计性能的影响,从而深化对状态估计理论精髓的理解。

逝川长叹
评论 3
收藏 已收藏
分享
返回顶部
jianminfly
机器视觉 4,514 成员 15,347 内容