コード例 #1
0
 /// <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));
     }
 }
コード例 #2
0
 //////////////////////////////////////////////////////////////////////////////////////////////
 /// <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));
     }
 }
コード例 #3
0
 /// <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);
     }
 }
コード例 #4
0
        //////////////////////////////////////////////////////////////////////////////////////////////
        #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));
        }
コード例 #5
0
 /// <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));
 }