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