sift關(guān)鍵點(diǎn)提取

尺度不變特征轉(zhuǎn)換(Scale-invariant feature transform,SIFT)是David Lowe在1999年發(fā)表悬秉,2004年總結(jié)完善反璃。其應(yīng)用范圍包括物體辨識(shí)鳖孤,機(jī)器人地圖感知與導(dǎo)航存和、3D模型建立骗村、手勢(shì)辨識(shí)、影像追蹤和動(dòng)作對(duì)比枣耀。此算法已經(jīng)申請(qǐng)專利,專利擁有者屬于英屬哥倫比亞大學(xué)庭再。SIFT算法在3D數(shù)據(jù)上的應(yīng)用由Flint等在2007年實(shí)現(xiàn)捞奕。這里所講的提取點(diǎn)云關(guān)鍵點(diǎn)的算法便是由Flint等人實(shí)現(xiàn)的SIFT3D算法。

pcl中sift關(guān)鍵點(diǎn)提取算法如下

#include <pcl/registration/ia_ransac.h>
#include <pcl/point_types.h>
#include <pcl/point_cloud.h>
#include <pcl/features/normal_3d.h>
#include <pcl/features/fpfh.h>
#include <pcl/search/kdtree.h>
#include <pcl/io/pcd_io.h>
#include <pcl/filters/filter.h>
#include <pcl/registration/icp.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <time.h>
#include <pcl/common/io.h>
#include <iostream>
#include <pcl/keypoints/sift_keypoint.h>//關(guān)鍵點(diǎn)檢測(cè)

using pcl::NormalEstimation;
using pcl::search::KdTree;
typedef pcl::PointXYZ PointT;
typedef pcl::PointCloud<PointT> PointCloud;

//點(diǎn)云可視化
void visualize_pcd(PointCloud::Ptr pcd_src,
    PointCloud::Ptr pcd_tgt)
    //PointCloud::Ptr pcd_final)
{


    pcl::visualization::PCLVisualizer viewer("registration Viewer");

    pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> src_h(pcd_src, 0, 255, 0);
    pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> tgt_h(pcd_tgt, 255, 0, 0);
    //pcl::visualization::PointCloudColorHandlerCustom<pcl::PointXYZ> final_h(pcd_final, 0, 0, 255);
    viewer.setBackgroundColor(255, 255, 255);
    viewer.addPointCloud(pcd_src, src_h, "source cloud");
    viewer.addPointCloud(pcd_tgt, tgt_h, "tgt cloud");
    //viewer.addPointCloud(pcd_final, final_h, "final cloud");
    
    viewer.setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 7, "tgt cloud");
    while (!viewer.wasStopped())
    {
        viewer.spinOnce(100);
        boost::this_thread::sleep(boost::posix_time::microseconds(100000));
    }

    //pcl中sift特征需要返回強(qiáng)度信息拄轻,改為如下:
}
namespace pcl
{
    template<>
    struct SIFTKeypointFieldSelector<PointXYZ>
    {
        inline float
            operator () (const PointXYZ &p) const
        {
            return p.z;
        }
    };
}


int
main(int argc, char** argv)
{
    //加載點(diǎn)云文件
    PointCloud::Ptr cloud_src_o(new PointCloud);//原點(diǎn)云颅围,待配準(zhǔn)
    pcl::io::loadPCDFile("E:/PointCloud/data/dragon/dragon.pcd", *cloud_src_o);
        cout << "原始點(diǎn)云數(shù)量:"<<cloud_src_o->size() << endl;
    //PointCloud::Ptr cloud_tgt_o(new PointCloud);//目標(biāo)點(diǎn)云
    //pcl::io::loadPCDFile("E:/PointCloud/data/pc_4.pcd", *cloud_tgt_o);

    //clock_t start = clock();
    //去除NAN點(diǎn)
    //std::vector<int> indices_src; //保存去除的點(diǎn)的索引
    //pcl::removeNaNFromPointCloud(*cloud_src_o, *cloud_src_o, indices_src);
    //std::cout << "remove *cloud_src_o nan" << cloud_src_o->size()<<endl;

    //std::vector<int> indices_tgt;
    //pcl::removeNaNFromPointCloud(*cloud_tgt_o, *cloud_tgt_o, indices_tgt);
    //std::cout << "remove *cloud_tgt_o nan" << cloud_tgt_o->size()<<endl;

    //設(shè)定參數(shù)值
    const float min_scale = 0.002f; //the standard deviation of the smallest scale in the scale space
    const int n_octaves = 3;//尺度空間層數(shù),小、關(guān)鍵點(diǎn)多
    const int n_scales_per_octave = 3;//the number of scales to compute within each octave
    const float min_contrast = 0.0001f;//根據(jù)點(diǎn)云恨搓,設(shè)置大小院促,越小關(guān)鍵點(diǎn)越多

    //sift關(guān)鍵點(diǎn)檢測(cè)
    pcl::SIFTKeypoint<pcl::PointXYZ, pcl::PointWithScale > sift_src;
    pcl::PointCloud<pcl::PointWithScale> result_src;
    pcl::search::KdTree<pcl::PointXYZ>::Ptr tree_src(new pcl::search::KdTree<pcl::PointXYZ>());
    sift_src.setSearchMethod(tree_src);
    sift_src.setScales(min_scale, n_octaves, n_scales_per_octave);
    sift_src.setMinimumContrast(min_contrast);
    sift_src.setInputCloud(cloud_src_o);
    sift_src.compute(result_src);

        clock_t end = clock();
    cout << "sift關(guān)鍵點(diǎn)提取時(shí)間" << (double)(end - start) / CLOCKS_PER_SEC << endl;
    cout << "sift關(guān)鍵點(diǎn)數(shù)量" << result_src.size() << endl;
    PointCloud::Ptr cloud_src(new PointCloud);
    pcl::copyPointCloud(result_src, *cloud_src);


    //可視化
    visualize_pcd(cloud_src_o, cloud_src);
    return (0);
}
sift關(guān)鍵點(diǎn)
運(yùn)行結(jié)果

對(duì)于sift關(guān)鍵點(diǎn)提取,相對(duì)比較耗時(shí)斧抱。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末常拓,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子辉浦,更是在濱河造成了極大的恐慌弄抬,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宪郊,死亡現(xiàn)場(chǎng)離奇詭異掂恕,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)弛槐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門懊亡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人乎串,你說我怎么就攤上這事斋配。” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵艰争,是天一觀的道長(zhǎng)坏瞄。 經(jīng)常有香客問我,道長(zhǎng)甩卓,這世上最難降的妖魔是什么鸠匀? 我笑而不...
    開封第一講書人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮逾柿,結(jié)果婚禮上缀棍,老公的妹妹穿的比我還像新娘。我一直安慰自己机错,他們只是感情好爬范,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著弱匪,像睡著了一般青瀑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上萧诫,一...
    開封第一講書人閱讀 51,287評(píng)論 1 301
  • 那天斥难,我揣著相機(jī)與錄音,去河邊找鬼帘饶。 笑死哑诊,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的及刻。 我是一名探鬼主播镀裤,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼缴饭!你這毒婦竟也來(lái)了淹禾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤茴扁,失蹤者是張志新(化名)和其女友劉穎铃岔,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年歼指,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纺且。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖稍浆,靈堂內(nèi)的尸體忽然破棺而出载碌,到底是詐尸還是另有隱情猜嘱,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布嫁艇,位于F島的核電站朗伶,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏步咪。R本人自食惡果不足惜论皆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望猾漫。 院中可真熱鬧点晴,春花似錦、人聲如沸悯周。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)禽翼。三九已至屠橄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間捐康,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工庸蔼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留解总,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓姐仅,卻偏偏與公主長(zhǎng)得像花枫,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子掏膏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容