色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

關(guān)于彩色圖像高斯反向投影基于OpenCV的C++代碼

OpenCV學(xué)堂 ? 來(lái)源:OpenCV學(xué)堂 ? 作者:OpenCV學(xué)堂 ? 2022-05-31 10:31 ? 次閱讀

彩色圖像高斯反向投影

一:介紹

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

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

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

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

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

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

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

  1. 首先加載模型圖像與測(cè)試圖像

  2. 根據(jù)模型圖像計(jì)算得到每個(gè)通道對(duì)應(yīng)的均值與標(biāo)準(zhǔn)方差參數(shù)

  3. 根據(jù)參數(shù)方差計(jì)算每個(gè)像素點(diǎn)的PDF值

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

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

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


	
  1. #include

  2. #include

  3. #include

  4. using namespace cv;

  5. using namespace std;

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

  7. // 加載模型圖像與測(cè)試圖像

  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. // 對(duì)每個(gè)通道 計(jì)算高斯PDF的參數(shù)

  16. // 有一個(gè)通道不計(jì)算,是因?yàn)樗梢酝ㄟ^(guò)1-r-g得到

  17. // 無(wú)需再計(jì)算

  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. // 計(jì)算均值與標(biāo)準(zhǔn)方差

  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. }

三:測(cè)試圖像與效果演示

藍(lán)色矩形框?yàn)槟P停麄€(gè)圖像為測(cè)試圖像

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

反向投影結(jié)果

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

分割提取結(jié)果

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

四:總結(jié)

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

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 圖像
    +關(guān)注

    關(guān)注

    2

    文章

    1089

    瀏覽量

    40528
  • 投影
    +關(guān)注

    關(guān)注

    0

    文章

    143

    瀏覽量

    24721
  • 圖像分割
    +關(guān)注

    關(guān)注

    4

    文章

    182

    瀏覽量

    18027

原文標(biāo)題:彩色圖像高斯反向投影

文章出處:【微信號(hào):CVSCHOOL,微信公眾號(hào):OpenCV學(xué)堂】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    AKI跨語(yǔ)言調(diào)用庫(kù)神助攻C/C++代碼遷移至HarmonyOS NEXT

    量;某知名社交電商平臺(tái)使用后減少了50%以上跨語(yǔ)言調(diào)用接口代碼量;某圖像處理軟件所有C++代碼復(fù)用通過(guò)AKI來(lái)實(shí)現(xiàn)。使用AKI后這些項(xiàng)目不僅減少了項(xiàng)目
    發(fā)表于 01-02 17:08

    圖像高斯濾波的原理及FPGA實(shí)現(xiàn)思路

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

    基于OpenCV的拆分和合并圖像通道實(shí)驗(yàn)案例分享_基于RK3568教學(xué)實(shí)驗(yàn)箱

    一、實(shí)驗(yàn)?zāi)康?本節(jié)視頻的目的是了解圖像通道的概念,學(xué)習(xí)OpenCV的基本操作,并掌握通過(guò)OpenCV實(shí)現(xiàn)拆分和合并圖像通道的方法。 二、實(shí)驗(yàn)原理 拆分與合并
    發(fā)表于 12-03 14:27

    RK3568 + OpenCV 會(huì)碰撞出什么火花?案例詳解:2-1 基于OpenCV的畫線實(shí)驗(yàn)

    一系列 C 函數(shù)和少量 C++ 類構(gòu)成,同時(shí)提供了Python、Ruby、MATLAB等語(yǔ)言的接口,實(shí)現(xiàn)了圖像處理和計(jì)算機(jī)視覺(jué)方面的很多通用算法。 OpenCV具有以下特點(diǎn): 不管是科
    發(fā)表于 12-03 14:09

    高斯濾波的特點(diǎn)有哪些

    高斯濾波作為一種廣泛使用的圖像處理技術(shù),具有以下幾個(gè)顯著的特點(diǎn): 平滑性 : 高斯濾波通過(guò)卷積操作對(duì)圖像進(jìn)行平滑處理,使圖像中的高頻部分(如
    的頭像 發(fā)表于 09-29 09:36 ?406次閱讀

    高斯卷積核函數(shù)在圖像采樣中的意義

    高斯卷積核函數(shù)在圖像采樣中的意義主要體現(xiàn)在以下幾個(gè)方面: 1. 平滑處理與去噪 平滑圖像高斯卷積核函數(shù)通過(guò)其權(quán)重分布特性,即中心像素點(diǎn)權(quán)重最高,周圍像素點(diǎn)權(quán)重逐漸降低,實(shí)現(xiàn)了對(duì)
    的頭像 發(fā)表于 09-29 09:33 ?480次閱讀

    OpenVINO2024 C++推理使用技巧

    很多人都使用OpenVINO新版的C++ 或者Python的SDK,都覺(jué)得非常好用,OpenVINO2022之后的版本C++ SDK做了大量的優(yōu)化與整理,已經(jīng)是非常貼近開(kāi)發(fā)的使用習(xí)慣與推理方式。與OpenCV的Mat對(duì)象對(duì)接方式
    的頭像 發(fā)表于 07-26 09:20 ?1019次閱讀

    ModusToolbox 3.2在c代碼中包含c++代碼的正確步驟是什么?

    使用 ModusToolbox 3.2 我有一個(gè)用純 C 語(yǔ)言編寫的 XMC4700 項(xiàng)目。 我正在嘗試添加一些 C++ 函數(shù),并將其合并到我的原始代碼中。 我可以構(gòu)建獨(dú)立的 .cpp/.hpp
    發(fā)表于 07-23 08:21

    OpenCV圖像識(shí)別C++代碼

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

    opencv圖像識(shí)別有什么算法

    OpenCV(Open Source Computer Vision Library)是一個(gè)開(kāi)源的計(jì)算機(jī)視覺(jué)和機(jī)器學(xué)習(xí)軟件庫(kù),提供了大量的圖像處理和計(jì)算機(jī)視覺(jué)相關(guān)的算法。以下是一些常見(jiàn)的OpenCV
    的頭像 發(fā)表于 07-16 10:40 ?1157次閱讀

    opencv-python和opencv一樣嗎

    的。以下是對(duì)OpenCVOpenCV-Python的比較: 編程語(yǔ)言: OpenCV是一個(gè)跨平臺(tái)的庫(kù),支持多種編程語(yǔ)言,如C++、Java、Python等。而
    的頭像 發(fā)表于 07-16 10:38 ?1328次閱讀

    OpenCV圖像降噪算法的中值濾波與高斯濾波詳解

    圖像噪聲是指圖像中不希望出現(xiàn)的隨機(jī)亮度或顏色變化,通常會(huì)降低圖像的清晰度和可辨識(shí)度,以及會(huì)降低圖像的質(zhì)量并使圖像分析和理解更加困難。
    的頭像 發(fā)表于 04-03 14:58 ?6819次閱讀
    <b class='flag-5'>OpenCV</b><b class='flag-5'>圖像</b>降噪算法的中值濾波與<b class='flag-5'>高斯</b>濾波詳解

    如何實(shí)現(xiàn)PIL和OpenCV之間圖像數(shù)據(jù)的轉(zhuǎn)換呢?

    PIL圖像數(shù)據(jù)格式轉(zhuǎn)換成OpenCV圖像數(shù)據(jù)格式
    的頭像 發(fā)表于 02-25 13:43 ?1265次閱讀

    基于QT5+OpenCV+OpenVINO C++的應(yīng)用打包過(guò)程

    我用QT C++寫了一個(gè)YOLOv5模型推理演示應(yīng)用。
    的頭像 發(fā)表于 01-26 10:17 ?1441次閱讀
    基于QT5+<b class='flag-5'>OpenCV</b>+OpenVINO <b class='flag-5'>C++</b>的應(yīng)用打包過(guò)程
    主站蜘蛛池模板: 亚洲国产精品自在自线观看| 久久re这里视频精品15| 亚洲专区区免费| 99久久免费视频6| 国产精品自产拍在线观看中文| 久久精品免视看国产| 色欲狠狠躁天天躁无码中文字幕| 亚洲日本欧美天堂在线| xnxx高中生| 公和熄洗澡三级中文字幕| 久久毛片基地| 天天看学生视频| 少妇精品无码一区二区三区 | 暖暖日本 在线 高清| 丝袜美女被啪啪不带套漫画| 亚洲AV福利天堂一区二区三| a在线视频免费观看| 精品国产自在天天线2019| 手机毛片在线观看| 999av视频| 久久超碰色中文字幕| 午夜DJ国产精华日本无码| 白银谷在线观看| 快播电影官方网站| 亚洲乱码一区二区三区香蕉| 多肉np一女多男高h爽文现代| 麻豆乱码一卡二卡三卡视频| 亚洲欧美偷拍视频一区| 国产高清视频免费最新在线 | 日本不卡一二三| 4480YY旧里番在线播放| 波多野结衣教师系列6| 久久这里只有是精品23| 亚洲狠狠网站色噜噜| 国产成人a v在线影院| 欧美写真视频一区| 2021国产精品| 精品一品国产午夜福利视频| 我的年轻漂亮继坶三级| 成人免费视频在线播放| 九九久久精品国产|