人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動態(tài)

OpenCV機器學習MeanShift算法筆記分享

發(fā)布日期:2022-01-31 12:21 | 文章來源:CSDN

MeanShift算法

Mean shift 是一種機器學習算法,并不僅僅局限于圖像上的應(yīng)用。關(guān)于 Mean shift 算法介紹的書和文章很多,這里就不多介紹了。簡單的說,Meanshift 算法是一種迭代算法,需要給一個初始的區(qū)域,然后這個算法會反復(fù)的調(diào)整這個區(qū)域,使得這個區(qū)域最吻合我們期望的特征。

OpenCV 中有兩處用到了 Mean Shift 。分別是:

pyrMeanShiftFiltering

meanShift

這里只介紹第二個函數(shù)的使用方法。

我們的原始圖像還是上次那個向日葵的圖像,我們選中其中一朵向日葵來計算 Histogram,但是這次我們計算 Hue 通道的 Histogram:

之后用這個直方圖數(shù)據(jù)在另外一個圖像中用 Meanshift 算法去找向日葵。

下面是代碼,首先加載原始圖像。在原始圖像中找到向日葵,計算向日葵區(qū)域的 Histogram。

 cv::Mat image = cv::imread("D:\\向日葵.jpg");
 cv::Mat imageROI = image(cv::Rect(130, 250, 75, 75));
 ColorHistogram hist;
 cv::Mat h = hist.getHueHistogram(imageROI, 65);
 cv::imshow("pic", image);
 ContentFinder finder;
 finder.setHistogram(h);
 finder.setThreshold(-1.0f);

之后加載我們要探測的圖像,做 backproject,得到概率分布圖。

 cv::Mat image2 = cv::imread("D:\\02.jpg");
 cv::Mat hsv;
 cv::cvtColor(image2, hsv, CV_BGR2HSV);
 int ch[1] = {0};
 cv::Mat probImage = finder.find(hsv, 0.0, 180, ch);
 cv::Mat img_color;
 cv::applyColorMap(probImage, img_color, cv::COLORMAP_JET);
 cv::imshow("backproject", img_color);

最后 Meanshift 就是在右圖中找出概率最大的那個區(qū)域。對于這個問題來說,其實做個遍歷就行。

meanshift 相比遍歷效率更高。但是如果初始區(qū)域選的不好,有可能會找不到向日葵所在的區(qū)域。

所以meanshift 并不是萬能的。

 cv::Rect rect(100, 100, 200, 200);
 cv::rectangle(image2, rect, cv::Scalar(255,0,0));
// cv::TermCriteria criteria(cv::TermCriteria::MAX_ITER, 30, 1);
 cv::TermCriteria criteria(cv::TermCriteria::MAX_ITER | cv::TermCriteria::EPS,
  10,
  1);
 cv::meanShift(probImage, rect, criteria);
 cv::rectangle(image2, rect, cv::Scalar(0,0,255));
 cv::imshow("image2", image2);

下面是輸出結(jié)果,藍框是我們隨便選的初始區(qū)域,紅框是得到的結(jié)果??梢钥吹綔蚀_的找到了向日葵所在區(qū)域。

如果我們初始區(qū)域選的不太好,就會找不到向日葵。比如下面的代碼。

 cv::Rect rect(0, 0, 200, 200);
 cv::rectangle(image2, rect, cv::Scalar(255,0,0));
 cv::TermCriteria criteria(cv::TermCriteria::MAX_ITER | cv::TermCriteria::EPS,
  10,
  1);
 cv::meanShift(probImage, rect, criteria);
 cv::rectangle(image2, rect, cv::Scalar(0,0,255));
 cv::imshow("image2", image2);

可以看到迭代了10次,但是區(qū)域一點沒動。一般來說我們可以隨機選擇初始區(qū)域,如果一個區(qū)域 meanshift失敗了,就再隨機選另一個區(qū)域。這樣試幾次就能得到不錯的結(jié)果。

以上就是OpenCV機器學習MeanShift算法筆記分享的詳細內(nèi)容,更多關(guān)于OpenCV機器學習的資料請關(guān)注本站其它相關(guān)文章!

美國快速服務(wù)器

版權(quán)聲明:本站文章來源標注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實時開通

自選配置、實時開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對1客戶咨詢顧問

在線
客服

在線客服:7*24小時在線

客服
熱線

400-630-3752
7*24小時客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部