1. 程式人生 > >關於雙目立體視覺的一些總結(二)

關於雙目立體視覺的一些總結(二)

https://blog.csdn.net/u014629875/article/details/51340144

上一篇只是對於雙目立體視覺做了一個簡單的介紹,這裡就我在做這個的時候碰到的一些問題做一個梳理。1.首先要糾正一下之前一個錯誤:cvRemap函式只接受灰度圖。其實這個函式要求src與dst大小格式通道必須一致就行,並不需要一定為灰度資料。當時下這個結論主要是因為被OpenCV的影象矩陣資料格式搞得很暈,為了先出個結果。後來有了要輸出三通道資料的需要,倒是研究了一下OpenCV影象的資料格式。 矩陣元素型別包括了兩部分資訊,首先是元素資料的型別,還有就是該元素包含的通道個數。/*Mat_<uchar>對應的是CV_8U,Mat_<uchar>對應的是CV_8U,Mat_<char>對應的是CV_8S,Mat_<int>對應的是CV_32S,Mat_<float>對應的是CV_32F,Mat_<double>對應的是CV_64F*/#define CV_8U   0#define CV_8S   1   #define CV_16U  2#define CV_16S  3#define CV_32S  4#define CV_32F  5#define CV_64F  6123456789灰度圖就用CV_8U,三通道圖就用CV_8UC3,像我得出的視差圖資料就用CV_16S來儲存,三維座標資訊的資料就用CV_32FC3的型別,總之按需求定。2.通過雙目獲取物體的三維資訊之後,我的目標是把這個三維資訊投影到地面平面上進行分析,所以需要建立空間座標系與地面平面座標系之間的轉化關係。 由於我只需要一個投影面,並不需要關注這個面是不是就是地面,只需要與地面平行即可,所以並不需要事先測定地面,這樣的話建立轉化就簡單了很多。從左片中取一些地面上的畫素點,計算出它們在空間座標系中的三維座標,用最小二乘擬合出這些點所在的平面Ax+By+Cz = D;空間座標系是以左相機光心為原點,視軸為Z軸,基線為X軸(方向指向右相機)的右手系。由於我只要求一個投影平面,座標系可以任意,不妨取上述擬合平面Ax+By+Cz = D與Z軸的交點為地面平面座標系的原點o,與X軸的交點作為x軸正半軸上的點,由此可建立一個地面投影面的座標系。幾個座標點:o(0,0,D);x(DADA,0,0);Y(-DA,D+DA2BD+DA2B,0)。可得到幾個座標向量:ox = (DADA,0,-D);oy = (-DA,D+DA2BD+DA2B,-D);oz = (A,B,C);假設空間中有一個點S(Xs,Ys,Zs);向量oS = (Xs,Ys,Zs - D);現在要求S在xoy平面上的投影,記作p。oS在oz上的投影為h = os⋅oz|oz|⋅ozos·oz|oz|·oz;所以op = oS - h,得到op之後求它在ox和oy上的投影即可得到投影面上的二維座標。這樣三維資訊就投影到了地面上,可以進行分析了。3.我需要把相機拍攝的運動物體(行人)提取出來,目前用的最多的有兩種方法: (1)基於背景建模: 利用背景建模方法,提取出前景運動的目標,在目標區域內進行特徵提取,然後利用分類器進行分類,判斷是否包含行人;(2)基於統計學習的方法: 目前行人檢測最常用的方法,根據大量的樣本構建行人檢測分類器。提取的特徵主要有目標的灰度、邊緣、紋理、顏色、梯度直方圖等資訊。由於當前時間較緊,現階段只有背景建模提取前景的方法,後續會嘗試將兩者結合使用。 我用的是最簡單的方法,即幀差法,有兩種普遍的方法,一種是前後幀相減,一種是三幀法,簡要程式碼如下:/*前後幀相減*/VideoCapture video("../camera.avi");Mat img1, img2, gray1, gray2, grayDiff;int diff_threshold = 20;  //幀差閾值while(1){    video.read(img1);    objectDetector(img1);    cvtColor(img1,gray1,CV_BGR2GRAY);    video.read(img2);    cvtColor(img2,gray2,CV_BGR2GRAY);    subtract(gray1,gray2,grayDiff);    for(int i = 0; i < grayDiff.rows; ++i)    {        for(int j = 0; j < grayDiff.cols; ++j)        {            if( abs(grayDiff.at<uchar>(i,j)) >= diff_threshold )            {                grayDiff.at<uchar>(i,j) = 255;            }            else            {                grayDiff.at<uchar>(i,j) = 0;            }        }    }    imshow("background",gray1);    imshow("zhencha",grayDiff);    char c = cvWaitKey(33);    if(c == 27)        break;}123456789101112131415161718192021222324252627282930313233343536/*三幀法*/VideoCapture video("../camera.avi");Mat img1, img2, gray1, gray2;Mat img3, gray3, grayDiff1, grayDiff2;int diff_threshold = 20;  //幀差閾值while(1){    video.read(img1);    video.read(img2);    video.read(img3);    cvtColor(img1,gray1,CV_BGR2GRAY);    cvtColor(img2,gray2,CV_BGR2GRAY);    cvtColor(img3,gray3,CV_BGR2GRAY);    subtract(gray1,gray2,grayDiff1);    subtract(gray2,gray3,grayDiff2);    for(int i = 0; i < grayDiff1.rows; ++i)    {        for(int j = 0; j < grayDiff2.cols; ++j)        {            if( abs(grayDiff1.at<uchar>(i,j)) >= diff_threshold )            {                grayDiff1.at<uchar>(i,j) = 255;            }            else            {                grayDiff1.at<uchar>(i,j) = 0;            }            if( abs(grayDiff2.at<uchar>(i,j)) >= diff_threshold )            {                grayDiff2.at<uchar>(i,j) = 255;            }            else            {                grayDiff2.at<uchar>(i,j) = 0;            }        }    }    bitwise_and(grayDiff1,grayDiff2,grayDiff);//和運算    imshow("background",img2);    imshow("zhencha",grayDiff);    char c = cvWaitKey(33);    if(c == 27)        break;}123456789101112131415161718192021222324252627282930313233343536373839404142434445464748得到前景之後就可以利用之前建立的座標系轉換得到人在地面上的投影,即我需要使用的深度資訊。 --------------------- 作者:Array03 來源:CSDN 原文:https://blog.csdn.net/u014629875/article/details/51340144 

相關推薦

關於雙目立體視覺一些總結

https://blog.csdn.net/u014629875/article/details/51340144上一篇只是對於雙目立體視覺做了一個簡單的介紹,這裡就我在做這個的時候碰到的一些問題做一個梳理。1.首先要糾正一下之前一個錯誤:cvRemap函式只接受灰度圖。其實這個函式要求src與dst大小格式

OpenCV 立體視覺詳細解析---視覺深度測量

先給出求視覺深度的演算法流程圖: 攝像頭標定: 攝像機標定的過程得出攝像機幾何模型,給出透鏡的畸變模型,這兩個模型定義了攝像機的內參數模型。 攝像機幾何模型: 針孔模型: (Learning Opencv中的此環節各種名詞的定義很混亂,在下面做一個統一) 成像

機器視覺學習總結—— LDA,PCA演算法與應用

//***************************** Face Recognize *********************************** void train(){ // load training data nTrainFaces = loadFace

關於雙目立體視覺一些總結

https://blog.csdn.net/u014629875/article/details/51227534由於專案和畢設的需要,最近在做一些立體視覺的東西,總算是把立體視覺建立起來了,中途查了很多相關資料,這裡做一個總結。1.簡介:雙目視覺是模擬人類視覺原理,使用計算機被動感知距離的方

運維工作中經常用到的一些知識總結

Markdown Xtraback Linux Squid DenyHost 接上篇:http://blog.51cto.com/bobo365/2125121 31、screen: screen -S xxx screen -r xxx screen -D -r <session-id

JVM調優總結-----一些概念

Java物件的大小     基本資料的型別的大小是固定的,這裡就不多說了。對於非基本型別的Java物件,其大小就值得商榷。     在Java中,一個空Object物件的大小是8byte,這個大小隻是儲存堆中一個沒有任何屬性的物件的

遠程協助開發總結

控制 amp 為什麽不能 username 開發 col dsc exce nec 遠程協助開發的過程中繼續總結 針對開發總結一的問題,改正了一些地方 1.圖像和命令采用兩個套接字,為什麽不能采用一個套接字?遠程協助是快頻的通信,圖像需要不間斷的從受控端發送到控制端,發送接

.net Kafka.Client多個Consumer Group對Topic消費不能完全覆蓋研究總結

eight 分享 stat .com ima topic consumer 閱讀 padding 依據Partition和Consumer的Rebalance策略,找到Kafka.Client Rebalance代碼塊,還原本地環境,跟蹤調試,發現自定義Consumer G

命令和符號總結

命令2017-05-13隨記—————————————————————————————— 20.uname 顯示系統內核信息 -r 顯示內核版本 -m 32位,64位本文出自 “一個Linux小白-學習運維” 博客,謝絕轉載!命令和符號總結(二)

設計模式總結

靈活性 mil 一個 blog 以及 對象模式 結構型設計模式 con 建模 設計模式可分為三種:創建型設計模式。結構型設計模式和行為型設計模式。 一、創建型設計模式 在設計模式中,創建型設計模式處理對象創建過程的設計模式。它依據實際情況來決定詳細如何創建對象。創建型模

String 經常用法最優算法實現總結

lean ... itl min empty turn system then 實現 1. String getOrderedString(boolean isDuplicated, String … str) 說明: Orders all characters in

ListView優化總結--Android

ride edittext over 變化 業務 適配器 全部 number moved 3.使用Activity和Delegate與適配器交互 這個內容是從書裏看到的,通過托付模式幫助開發人員把全部的業務邏輯從適配器中移到Activity中。以下是加入電話號碼的樣例

工作中能用到的基礎知識總結

protected 構造函數 blog 繼承鏈 附加 調用 初始化 傳統 -s 簡介 繼承、封裝和多態是面向對象編程的重要特性。要想運用好,就必須熟悉這三種特性,本篇說說我對封裝、繼承和多態相關的知識總結。 知識點 一、訪問修飾符 C#中類及

Android4.0設置界面改動總結

idg 手機 中新 pop istview _id 實例 cycle 系統應用 今年1月份的時候。有和大家分享給予Android4.0+系統設置的改動:Android4.0設置界面改動總結 時隔半年。回頭看看那個時候的改動。事實上是有非常多問題的,比方說

css基礎知識的復習總結

文本 pin zoom clear head 導航 設置 mage 之間 文檔流、浮動、清除浮動、overflow、定位 1.文檔流 css文檔流,標準流是什麽? 元素自上而下,自左而右,塊元素獨占一行,行內元素在一行上顯示,碰到父集元素的邊框換行。

freemarker寫select組件報錯總結

popu sts 定義 style runt schedule size template marker 1、錯誤描寫敘述 六月 25, 2014 11:32:49 下午 freemarker.log.JDK14LoggerFactory$JDK14Logge

I/O操做總結

路徑名 con abc 虛擬 參考 () dpa dir isa 文件的操作 這一節我們來討論關於文件自身的操作 不浪費唾沫了,用代碼說話…… 實例1:創建文件對象 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

[轉載] java多線程總結

判斷 home run 選擇 作者 得到 生命周期 on() .com 轉載自:http://www.cnblogs.com/lwbqqyumidi/p/3817517.html 作者:Windstep 四.Java多線程的阻塞狀態與線程控制 上文已經提到Java阻塞的

java基礎總結---關鍵字

-- rem 關鍵字 rgs java err style ret 基礎總結 1.this   在java中, this 對象,它可以在類裏面來引用這個類的屬性和方法。   1.它在方法內部使用,即這個方法所屬的對象的引用。   2.它在構造器內部使用,表示該構造器正在初始

Jsp學習總結

font 返回 dir ica 兩種方法 http 形參 狀態信息 string Jsp腳本中的9大內置對象(都是_jspService()方法中的形參,或者是局部變量): application:對應javax.servlet.ServletContext實例,代表