前に書く
記事のコードまたは疑似コードはオンラインからの抜粋であり、私のコードは非公開です!
hw2
1.ハリスコーナー検出
特徴点の計算
アフィン:(必須の座標変換)
非最大抑制(NMS)
ターゲット検出を行う場合、一般的にウィンドウスライディング法を採用して画像上に多数の候補フレームを生成し、それらの候補フレームを特徴抽出して分類器に送信します。通常、顔検出などのスコアが取得されます。 、多くのボックスにスコアがあり、これらすべてのスコアがソートされます。スコアが最も高いボックスを選択し、他のボックスと現在のボックスとのオーバーラップの度合い(iou)を計算します。オーバーラップの度合いが特定のしきい値よりも大きい場合は、同じ面にスコアの高いボックスがいくつかある可能性があるため、削除します。人間の顔ですが、額に入れる必要はありません。必要なのは1つだけです。
残りのボックスをトラバースし、現在の最高のサブフレームとのオーバーラップエリア(IOU)が特定のしきい値より大きい場合、ボックスを削除します
オンラインで見つかったMATLABコード
%% NMS:non maximum suppression
function pick = nms(boxes,threshold,type)
% boxes: m x 5,表示有m个框,5列分别是[x1 y1 x2 y2 score]
% threshold: IOU阈值
% type:IOU阈值的定义类型
% 输入为空,则直接返回
if isempty(boxes)
pick = [];
return;
end
% 依次取出左上角和右下角坐标以及分类器得分(置信度)
x1 = boxes(:,1);
y1 = boxes(:,2);
x2 = boxes(:,3);
y2 = boxes(:,4);
s = boxes(:,5);
% 计算每一个框的面积
area = (x2-x1+1) .* (y2-y1+1);
%将得分升序排列
[vals, I] = sort(s);
%初始化
pick = s*0;
counter = 1;
% 循环直至所有框处理完成
while ~isempty(I)
last = length(I); %当前剩余框的数量
i = I(last);%选中最后一个,即得分最高的框
pick(counter) = i;
counter = counter + 1;
%计算相交面积
xx1 = max(x1(i), x1(I(1:last-1)));
yy1 = max(y1(i), y1(I(1:last-1)));
xx2 = min(x2(i), x2(I(1:last-1)));
yy2 = min(y2(i), y2(I(1:last-1)));
w = max(0.0, xx2-xx1+1);
h = max(0.0, yy2-yy1+1);
inter = w.*h;
%不同定义下的IOU
if strcmp(type,'Min')
%重叠面积与最小框面积的比值
o = inter ./ min(area(i),area(I(1:last-1)));
else
%交集/并集
o = inter ./ (area(i) + area(I(1:last-1)) - inter);
end
%保留所有重叠面积小于阈值的框,留作下次处理
I = I(find(o<=threshold));
end
pick = pick(1:(counter-1));
end
2.パッチマッチング
距離測定:
Σx、y(I(x、y)-J(x、y))2
最適な一致を見つける
ランダムサンプルコンセンサスアルゴリズム(RANSAC)
外れ値を含む観測データのセットから数学モデルのパラメーターを繰り返し推定します。
①最小サンプリングセット電位n(nはモデルパラメーターの初期化に必要な最小サンプル数)のモデルとサンプルセットP、セット内のサンプル数P#§> n、Pからn個のサンプルをランダムに選択するPのサブセットSはモデルMを初期化します
。②残差セットSC = P \ Sの誤差が特定の設定しきい値t未満であり、SがS *を構成するサンプルセット。Sは内部ポイントセットと見
なされ、S(コンセンサスセット)の一貫したセットを構成します。③#(S)≥Nの場合、正しいモデルパラメーターが得られたと見なされ、セットS *(インライア)を使用して最小二乗法が使用されます。新しいモデルM *を再計算し、新しいSをランダムに抽出して、上記のプロセスを繰り返します。
④一定回数のサンプリングを行った後、整合集合が見つからない場合はアルゴリズムが失敗し、それ以外の場合はサンプリング後に得られた最大の整合集合を用いて内外の点を判定し、アルゴリズムを終了します。
擬似コードアルゴリズムは次のとおりです:(オンライン)
输入:
Data 一组观测数据
Model 适应于数据的模型
n 适应于模型的最小数据个数
k 算法的迭代次数
t 用于决定数据是否适应于模型的阈值
d 判定模型是否适用于数据集的数据数目
参考链接:http://blog.csdn.net/pi9nc/article/details/26596519
Best_model 与数据最匹配的模型参数(没有返回null)
Best_consensus_set 估计出模型的数据点
Best_error 跟数据相关的估计出的模型错误
iterations = 0
best_model = null
best_consensus_set = null
best_error = 无穷大
while ( iterations < k )
maybe_inliers = 从数据集中随机选择n个点
maybe_model = 适合于maybe_inliers的模型参数
consensus_set = maybe_inliers
for ( 每个数据集中不属于maybe_inliers的点 )
if ( 如果点适合于maybe_model,且错误小于t )
将点添加到consensus_set
if ( consensus_set中的元素数目大于d )
已经找到了好的模型,现在测试该模型到底有多好
better_model = 适合于consensus_set中所有点的模型参数
this_error = better_model究竟如何适合这些点的度量
if ( this_error < best_error )
我们发现了比以前好的模型,保存该模型直到更好的模型出现
best_model = better_model
best_consensus_set = consensus_set
best_error = this_error
增加迭代次数
返回 best_model, best_consensus_set, best_error
詳細なSIFTアルゴリズム
https://blog.csdn.net/zddblog/article/details/7521424