<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          彩色圖像高斯反向投影

          共 4897字,需瀏覽 10分鐘

           ·

          2021-09-14 15:23

          點擊上方小白學(xué)視覺”,選擇加"星標"或“置頂

          重磅干貨,第一時間送達

          彩色圖像高斯反向投影

          一:介紹


          圖像反向投影的最終目的是獲取ROI然后實現(xiàn)對ROI區(qū)域的標注、識別、測量等圖像處理與分析,是計算機視覺與人工智能的常見方法之一。圖像反向投影通常是彩色圖像投影效果會比灰度圖像效果要好,原因在于彩色圖像帶有更多對象細節(jié)信息,在反向投影的時候更加容易判斷、而轉(zhuǎn)為灰度圖像會導(dǎo)致這些細節(jié)信息丟失、從而導(dǎo)致分割失敗。最常見的是基于圖像直方圖特征的反向投影。我們這里介紹一種跟直方圖反向投影不一樣的彩色圖像反向投影方法,通過基于高斯的概率分布公式(PDF)估算,反向投影得到對象區(qū)域,該方法也可以看做最簡單的圖像分割方法。缺點是對象顏色光照改變和尺度改變不具備不變性特征。所以需要在光照度穩(wěn)定情況下成像采集圖像數(shù)據(jù)。在這種情況下使用的高斯概率密度公式為:

          1. 輸入模型M,對M的每個像素點(R,G,B)計算I=R+G+B r=R/I, g=G/I, b=B/I

          2. 根據(jù)得到權(quán)重比例值,計算得到對應(yīng)的均值 與標準方差

          3. 對輸入圖像的每個像素點計算根據(jù)高斯公式計算P(r)與P(g)的乘積

          4. 歸一化之后輸出結(jié)果,即為最終基于高斯PDF的反向投影圖像


          二:算法步驟與代碼實現(xiàn)


          1. 首先加載模型圖像與測試圖像

          2. 根據(jù)模型圖像計算得到每個通道對應(yīng)的均值與標準方差參數(shù)

          3. 根據(jù)參數(shù)方差計算每個像素點的PDF值

          4. 歸一化概率分布圖像-即為反向投影圖像,顯示

          5. 根據(jù)Mask得到最終顏色模型對象分割


          完整的基于OpenCV的C++代碼如下:


          1. #include<opencv2/opencv.hpp>

          2. #include<iostream>

          3. #include<math.h>

          4. usingnamespace cv;

          5. usingnamespace std;

          6. int main(int argc, char** argv) {

          7.    // 加載模型圖像與測試圖像

          8.    Mat src = imread("D:/gloomyfish/gc_test.png");

          9.    Mat model = imread("D:/gloomyfish/gm.png");

          10.    if(src.empty() || model.empty()) {

          11.        printf("could not load image...\n");

          12.        return-1;

          13.    }

          14.    imshow("input image", src);

          15.    // 對每個通道 計算高斯PDF的參數(shù)

          16.    // 有一個通道不計算,是因為它可以通過1-r-g得到

          17.    // 無需再計算

          18.    Mat R = Mat::zeros(model.size(), CV_32FC1);

          19.    Mat G = Mat::zeros(model.size(), CV_32FC1);

          20.    int r = 0, g = 0, b = 0;

          21.    float sum = 0;

          22.    for(int row = 0; row < model.rows; row++) {

          23.        uchar* current = model.ptr<uchar>(row);

          24.        for(int col = 0; col < model.cols; col++) {

          25.            b = *current++;

          26.            g = *current++;

          27.            r = *current++;

          28.            sum = b + g + r;

          29.            R.at<float>(row, col) = r / sum;

          30.            G.at<float>(row, col) = g / sum;

          31.        }

          32.    }

          33.    // 計算均值與標準方差

          34.    Mat mean, stddev;

          35.    double mr, devr;

          36.    double mg, devg;

          37.    meanStdDev(R, mean, stddev);

          38.    mr = mean.at<double>(0, 0);

          39.    devr = mean.at<double>(0, 0);

          40.    meanStdDev(G, mean, stddev);

          41.    mg = mean.at<double>(0, 0);

          42.    devg = mean.at<double>(0, 0);

          43.    int width = src.cols;

          44.    int height = src.rows;

          45.    // 反向投影

          46.    float pr = 0, pg = 0;

          47.    Mat result = Mat::zeros(src.size(), CV_32FC1);

          48.    for(int row = 0; row < height; row++) {

          49.        uchar* currentRow = src.ptr<uchar>(row);

          50.        for(int col = 0; col < width; col++) {

          51.            b = *currentRow++;

          52.            g = *currentRow++;

          53.            r = *currentRow++;

          54.            sum = b + g + r;

          55.            float red = r / sum;

          56.            float green = g / sum;

          57.            pr = (1/ (devr*sqrt(2* CV_PI)))*exp(-(pow((red - mr), 2)) / (2* pow(devr, 2)));

          58.            pg = (1/ (devg*sqrt(2* CV_PI)))*exp(-(pow((green - mg),2)) / (2* pow(devg, 2)));

          59.            sum = pr*pg;

          60.            result.at<float>(row, col) = sum;

          61.        }

          62.    }

          63.    // 歸一化顯示高斯反向投影

          64.    Mat img(src.size(), CV_8UC1);

          65.    normalize(result, result, 0, 255, NORM_MINMAX);

          66.    result.convertTo(img, CV_8U);

          67.    Mat segmentation;

          68.    src.copyTo(segmentation, img);

          69.    // 顯示

          70.    imshow("backprojection demo", img);

          71.    imshow("segmentation demo", segmentation);

          72.    waitKey(0);

          73.    return0;

          74. }

          三:測試圖像與效果演示


          藍色矩形框為模型,整個圖像為測試圖像

          反向投影結(jié)果

          分割提取結(jié)果

          四:總結(jié)


          大家看了這個例子總是有點怪怪的,總會想起點什么,如果你能想起點什么的話就是GMM,高斯混合模型,高斯混合模型正是在此基礎(chǔ)上進一步演化而來。

          好消息,小白學(xué)視覺團隊的知識星球開通啦,為了感謝大家的支持與厚愛,團隊決定將價值149元的知識星球現(xiàn)時免費加入。各位小伙伴們要抓住機會哦!


          下載1:OpenCV-Contrib擴展模塊中文版教程
          在「小白學(xué)視覺」公眾號后臺回復(fù):擴展模塊中文教程即可下載全網(wǎng)第一份OpenCV擴展模塊教程中文版,涵蓋擴展模塊安裝、SFM算法、立體視覺、目標跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。

          下載2:Python視覺實戰(zhàn)項目52講
          小白學(xué)視覺公眾號后臺回復(fù):Python視覺實戰(zhàn)項目即可下載包括圖像分割、口罩檢測、車道線檢測、車輛計數(shù)、添加眼線、車牌識別、字符識別、情緒檢測、文本內(nèi)容提取、面部識別等31個視覺實戰(zhàn)項目,助力快速學(xué)校計算機視覺。

          下載3:OpenCV實戰(zhàn)項目20講
          小白學(xué)視覺公眾號后臺回復(fù):OpenCV實戰(zhàn)項目20講即可下載含有20個基于OpenCV實現(xiàn)20個實戰(zhàn)項目,實現(xiàn)OpenCV學(xué)習進階。

          交流群


          歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN算法競賽等微信群(以后會逐漸細分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三 + 上海交大 + 視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~


          瀏覽 35
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产操B片 | 国产秋霞 | 青娱乐亚洲国内 | 亚洲日韩欧美综合热 | 欧美午夜精品一区二区 |