/// <summary> /// 反投影,不會先做直方圖標準化 /// </summary> /// <param name="hist">輸入直方圖</param> /// <param name="observedSceneImg">要觀察比對的影像</param> /// <returns>反向投影後的灰階圖,顏色由黑接近白,代表匹配率由低到越高</returns> public static Image <Gray, Byte> DoBackProject(DenseHistogram hist, Image <Bgr, Byte> observedSceneImg) { if (hist.Dimension == 1) { return(HistogramOperation.HBackProject(hist, observedSceneImg, false)); } else if (hist.Dimension == 2) { return(HistogramOperation.HSBackProject(hist, observedSceneImg, false)); } else { return(HistogramOperation.HSVBackProject(hist, observedSceneImg, false)); } }
////////////////////////////////////////////////////////////////////////////////////////////// /// <summary> /// 反投影,可選擇是標準化的輸入數值 /// </summary> /// <param name="hist">輸入直方圖</param> /// <param name="observedSceneImg">要觀察比對的影像</param> /// <param name="value">標準化的參數值</param> /// <returns></returns> public static Image <Gray, Byte> DoBackProjectBeforeNormalizationHist(DenseHistogram hist, Image <Bgr, Byte> observedSceneImg, double value) { if (hist.Dimension == 1) { return(HistogramOperation.HBackProject(hist, observedSceneImg, true, value)); } else if (hist.Dimension == 2) { return(HistogramOperation.HSBackProject(hist, observedSceneImg, true, value)); } else { return(HistogramOperation.HSVBackProject(hist, observedSceneImg, true, value)); } }
/// <summary> /// 畫出直方圖到圖上,會依據你選擇的計算維度畫出相對應維度的直方圖(只能提供一維與二維) /// </summary> /// <param name="hsvHist">值方圖資料</param> /// <returns>回傳畫上值方圖資料的影像</returns> public Image <Bgr, Byte> DrawHsvHistogram(DenseHistogram hsvHist) { if (hsvHist.Dimension == 1) { return(HistogramOperation.Generate1DHistogramImgForDraw(hsvHist)); } else if (hsvHist.Dimension == 2) { return(HistogramOperation.Generate2DHistogramImgForDraw(hsvHist)); } else { return(null); } }
////////////////////////////////////////////////////////////////////////////////////////////// #endregion #region 匹配值方圖 ////////////////////////////////////////////////////////////////////////////////////////////// /// <summary> /// 直方圖匹配(使用BHATTACHARYYA) /// </summary> /// <param name="template">樣板值方圖</param> /// <param name="observedSrcImg">要比對的圖像</param> /// <param name="observedHist">觀察影像的直方圖</param> /// <returns>匹配率越低表示匹配度越高</returns> public static double CompareHistogram(DenseHistogram template, Image <Bgr, Byte> observedSrcImg, out DenseHistogram observedHist) { //計算影像的值方圖 if (template.Dimension == 1) { observedHist = HistogramOperation.CalHsvHistogram(observedSrcImg.Ptr, template.Dimension, template.BinDimension[0].Size); } else if (template.Dimension == 2) { observedHist = HistogramOperation.CalHsvHistogram(observedSrcImg.Ptr, template.Dimension, template.BinDimension[0].Size, template.BinDimension[1].Size); } else { observedHist = HistogramOperation.CalHsvHistogram(observedSrcImg.Ptr, template.Dimension, template.BinDimension[0].Size, template.BinDimension[1].Size, template.BinDimension[2].Size); } //匹配後回傳匹配率 return(HistogramOperation.CompareHist(template, observedHist)); }
/// <summary> /// 計算值方圖 /// </summary> /// <param name="dim">選取維度計算,1 = 只取hue,2 = H-S,預設為1</param> /// <param name="HBins">H色調預設50</param> /// <param name="SBins">S飽和度預設0</param> /// <param name="VBins">V預設0</param> public DenseHistogram CalHist(int dim = 1, int HBins = 50, int SBins = 0, int VBins = 0) { return(HistogramOperation.CalHsvHistogram(templateImg, dim, HBins, SBins, VBins)); }