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

2022-09-25 03:57:10 字數 2243 閱讀 2547

mean shift是一種機器學習演算法,並不僅僅侷限於影象上的應用。關於mean shift演算法介紹的書和文章很多,這裡就不多介紹了。簡單的說,meanshift演算法是一種迭代演算法,需要給乙個初始的區域,然後這個演算法會反覆的調整這個區域,使得這個區域最吻合我們期望的特徵。

opencv 中有兩處用到了mean shift。分別是:

pyrmeanshiftfiltwww.cppcns.comering

meanshift

這裡只介紹第二個函式的使用方法。

我們的原始影象還是上次那個向日葵的影象,我們選中其中一朵向日葵來計算 histoelcfcmsgram,但是這次我們計算 hue 通道的 histogram:

之後用這個直方圖資料在另外乙個影象中用 meanshift 演算法去找向日葵。

下面是**,首先載入原始影象。在原始影象中找到向日葵,計算向日葵區域的 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,得到概率分布圖。

最後 meanshift 就是在右圖中找出概率最大的那個區域。對於這個問題來說,其實做個遍歷就行。

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

所以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);

下面是輸出結果,藍框是我們隨便選的初始區域,紅框是得到的結果。可以看到準確的找到了向日葵所在www.cppcns.com區域。

如果我們初始區域選的不太好,就會找不到向日葵。比如下面的**。

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次,但是區域一點沒動。一般來說我們可以隨機選擇初始區域,如果乙個區域 meanshift失敗了,就再隨機選另乙個區域。這樣試幾次就能得到不錯的結果。

機器學習opencv學習筆記

haar adaboost實現人臉識別 1 首先明白什麼是特徵 特徵 畫素經過運算 得到的結果 具體值 向量 矩陣 多維 2 如何利用特徵區分目標?閾值判決 3 得到判決?機器學習 haar特徵,是一種利用模版對畫素的計算,主要有模版的滑動和模版的縮放 opencv中haar特徵模版有一下的14種 ...

機器學習 opencv 人臉識別

鑑於本人的工作環境主要是採用python作為開發工具,故本篇部落格是基於python來做的學習記錄。1.讀取,將其轉換為陣列 from matplotlib import pyplot as pyl import cv2 import numpy img cv2.imread cat.jpg img...

opencv 資料備份及機器學習

中文版本及 mark ar 過程 車牌識別 一 畫與 變色之初探 opencv 學習部落格 3.1.0版本函式查詢首頁 opencv 官方書籍pdf文件和 全景1.完成基礎神經網路nodejs 庫 基礎神經網路核心公式 防止神經網路的過擬合方法 l2正則化,dropout和輸入噪音等 the los...