在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

關于彩色圖像高斯反向投影基于OpenCV的C++代碼

OpenCV學堂 ? 來源:OpenCV學堂 ? 作者:OpenCV學堂 ? 2022-05-31 10:31 ? 次閱讀

彩色圖像高斯反向投影

一:介紹

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

ca2d336c-e030-11ec-ba43-dac502259ad0.png

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

  2. 根據得到權重比例值,計算得到對應的均值 與標準方差

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

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

二:算法步驟與代碼實現

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

  2. 根據模型圖像計算得到每個通道對應的均值與標準方差參數

  3. 根據參數方差計算每個像素點的PDF值

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

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

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


	
  1. #include

  2. #include

  3. #include

  4. using namespace cv;

  5. using namespace 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... ");

  12. return -1;

  13. }

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

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

  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(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(row, col) = r / sum;

  30. G.at(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(0, 0);

  39. devr = mean.at(0, 0);

  40. meanStdDev(G, mean, stddev);

  41. mg = mean.at(0, 0);

  42. devg = mean.at(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(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(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. return 0;

  74. }

三:測試圖像與效果演示

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

ca537e82-e030-11ec-ba43-dac502259ad0.jpg

反向投影結果

ca6bdc70-e030-11ec-ba43-dac502259ad0.jpg

分割提取結果

cab28b66-e030-11ec-ba43-dac502259ad0.jpg

四:總結

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

審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 圖像
    +關注

    關注

    2

    文章

    1092

    瀏覽量

    41030
  • 投影
    +關注

    關注

    0

    文章

    143

    瀏覽量

    24978
  • 圖像分割
    +關注

    關注

    4

    文章

    182

    瀏覽量

    18254

原文標題:彩色圖像高斯反向投影

文章出處:【微信號:CVSCHOOL,微信公眾號:OpenCV學堂】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    基于LockAI視覺識別模塊:C++輪廓檢測

    本文檔展示了如何使用 OpenCV 進行圖像處理和特征檢測,包括邊緣檢測、直線檢測、圓檢測以及多邊形擬合。通過這些技術,可以實現對攝像頭捕獲的實時視頻流進行分析,并標記出檢測到的特征。 源代碼地址
    發表于 05-22 10:05

    基于LockAI視覺識別模塊:C++多模板匹配

    /master/Cpp_example/C03_Template_Matching_more 1. 基本知識講解 1.1 多模板匹配的重要幸 目標檢測:多模板匹配可以用于檢測圖像中的多個特定對象。 應用場
    發表于 05-14 15:00

    基于LockAI視覺識別模塊:C++使用圖像的統計信息

    ./Test-Image-information-statistics 5.2 運行效果 在運行上述代碼時,會輸出以下結果: 6. 總結 通過上述內容,我們介紹了如何使用 OpenCV 提取圖像的 ROI、轉換顏色空間、計算
    發表于 05-08 10:31

    基于LockAI視覺識別模塊:C++圖像的基本運算

    圖像處理中,理解圖像的基本操作是掌握計算機視覺技術的關鍵。本文章將介紹 基于LockAI視覺識別模塊下OpenCV圖像的基本運算方法,包括像素操作、邏輯運算和差值運算,并通過一個
    發表于 05-06 16:56

    基于LockAI視覺識別模塊:C++圖像采集例程

    本文主要演示如何使用LockAI視覺識別模塊進行視頻流的讀取,同時使用Edit模塊進行圖像傳輸。基礎知識講解1.1OpenCV簡介OpenCV(OpenSourceComputerVisionLibra
    的頭像 發表于 04-30 18:23 ?110次閱讀
    基于LockAI視覺識別模塊:<b class='flag-5'>C++</b><b class='flag-5'>圖像</b>采集例程

    基于LockAI視覺識別模塊:C++圖像采集例程

    本文主要演示如何使用LockAI視覺識別模塊進行視頻流的讀取,同時使用Edit模塊進行圖像傳輸。 例程源代碼地址:https://gitee.com/LockzhinerAI
    發表于 04-30 10:52

    創建了用于OpenVINO?推理的自定義C++和Python代碼,從C++代碼中獲得的結果與Python代碼不同是為什么?

    創建了用于OpenVINO?推理的自定義 C++ 和 Python* 代碼。 在兩個推理過程中使用相同的圖像和模型。 從 C++ 代碼
    發表于 03-06 06:22

    DLP4500怎么確定投影儀開始投影的同時相機的c++代碼開始運行?

    投影儀通過trig1 鏈接相機,投影儀投圖同時觸發相機,相機采集圖像并傳回電腦,相機的代碼里需要添加dlp4500的api或sdk代碼嗎,
    發表于 02-18 07:16

    代碼加密、源代碼防泄漏c/c++與git服務器開發環境

    代碼加密對于很多研發性單位來說是至關重要的,當然每家企業的業務需求不同所用的開發環境及開發語言也不盡相同,今天主要來講一下c++及git開發環境的源代碼防泄密保護方案。企業源代碼泄密
    的頭像 發表于 02-12 15:26 ?459次閱讀
    源<b class='flag-5'>代碼</b>加密、源<b class='flag-5'>代碼</b>防泄漏<b class='flag-5'>c</b>/<b class='flag-5'>c++</b>與git服務器開發環境

    AKI跨語言調用庫神助攻C/C++代碼遷移至HarmonyOS NEXT

    量;某知名社交電商平臺使用后減少了50%以上跨語言調用接口代碼量;某圖像處理軟件所有C++代碼復用通過AKI來實現。使用AKI后這些項目不僅減少了項目
    發表于 01-02 17:08

    圖像高斯濾波的原理及FPGA實現思路

    1.概念 高斯分布 圖像濾波之高斯濾波介紹 圖像處理算法|高斯濾波 高斯濾波(Gaussian
    的頭像 發表于 12-07 09:12 ?1755次閱讀
    <b class='flag-5'>圖像</b><b class='flag-5'>高斯</b>濾波的原理及FPGA實現思路

    基于OpenCV的拆分和合并圖像通道實驗案例分享_基于RK3568教學實驗箱

    一、實驗目的 本節視頻的目的是了解圖像通道的概念,學習OpenCV的基本操作,并掌握通過OpenCV實現拆分和合并圖像通道的方法。 二、實驗原理 拆分與合并
    發表于 12-03 14:27

    OpenVINO2024 C++推理使用技巧

    很多人都使用OpenVINO新版的C++ 或者Python的SDK,都覺得非常好用,OpenVINO2022之后的版本C++ SDK做了大量的優化與整理,已經是非常貼近開發的使用習慣與推理方式。與OpenCV的Mat對象對接方式
    的頭像 發表于 07-26 09:20 ?1438次閱讀

    OpenCV圖像識別C++代碼

    的頭文件 在您的C++代碼中,包含以下必要的頭文件: # include # include # include # include # include # include # include 讀取圖像
    的頭像 發表于 07-16 10:42 ?3875次閱讀

    opencv-python和opencv一樣嗎

    的。以下是對OpenCVOpenCV-Python的比較: 編程語言: OpenCV是一個跨平臺的庫,支持多種編程語言,如C++、Java、Python等。而
    的頭像 發表于 07-16 10:38 ?1932次閱讀
    主站蜘蛛池模板: 久久三级网站 | 小说老卫陈红张敏陈法蓉 | 男人天堂网址 | 日本免费色网站 | 狠狠干2015 | 国产资源视频 | 午夜 福利 视频 | 激情六月网 | 欧美激欧美啪啪片免费看 | 最新sss华人 | 黄色有码视频 | 手机看片免费永久在线观看 | 国产黄mmd在线观看免费 | 欧美一区二区视频三区 | 美女免费视频色在线观看 | 日日噜噜噜夜夜爽爽狠狠视频 | 久久精品.com| 国产一级毛片午夜 | аⅴ资源天堂8在线 | 亚洲精品成人久久久影院 | 午夜在线视频免费观看 | 视频一二三区 | a天堂中文在线 | www.男人| 真爽~张开腿~让我插 | 操你啦在线播放 | 麦克斯奥特曼在线观看 | 国产做爰一区二区 | 免费看大美女大黄大色 | 成人国产永久福利看片 | 天天干天天爽天天操 | h网站亚洲 | 狠狠色丁香婷婷久久综合不卡 | 综合色亚洲| 国产一卡二卡≡卡四卡无人 | 免费v片网站 | 四虎影院com| 亚洲视频在线视频 | 天天曰天天干 | 免费看欧美理论片在线 | 一卡二卡三卡四卡无卡在线 |