Beispiel #1
0
        public static Image <Gray, Byte> SkinDetectHSV(HSVTree skinHsvTree, HSVTree nSkinHsvTree, Image <Bgr, Byte> img, int erode, int radius)
        {
            HSVTree            hsvSkinTreeCopy  = skinHsvTree;
            HSVTree            hsvNSkinTreeCopy = nSkinHsvTree;
            Image <Gray, Byte> resultImg        = new Image <Gray, Byte>(img.Size);

            resultImg._EqualizeHist();
            Image <Hsv, Byte> hsvImg = img.Convert <Hsv, Byte>();
            //List<Hsv> hsvStack = new List<Hsv>();


            int height = resultImg.Height;
            int width  = resultImg.Width;

            for (int i = 0; i < height; i++)
            {
                for (int j = 0; j < width; j++)
                {
                    Hsv hsv = hsvImg[i, j];

                    int freqSkin  = hsvSkinTreeCopy.GetFreq(hsv);
                    int freqNSkin = hsvNSkinTreeCopy.GetFreq(hsv);

                    if (freqSkin > freqNSkin)
                    {
                        resultImg.Data[i, j, 0] = 250;
                    }
                }
            }


            resultImg._EqualizeHist();
            Image <Gray, Byte> erodedImg = resultImg.Erode(erode);


            Image <Gray, Byte> dilatedImg = erodedImg.Dilate(radius);

            dilatedImg._EqualizeHist();
            return(dilatedImg);
        }
Beispiel #2
0
        public static Image <Gray, Byte> HistSkinDetectHSV(HSVTree skinTree, HSVTree nSkinTree, Image <Hsv, Byte> inputImg)
        {
            Image <Gray, Byte> resultImg = new Image <Gray, Byte>(inputImg.Size);

            int height = resultImg.Height;
            int width  = resultImg.Width;

            for (int i = 0; i < height; i++)
            {
                for (int j = 0; j < width; j++)
                {
                    Hsv hsvPix = inputImg[i, j];

                    //int freqSkin = skinTree.GetFreq(hsvPix);

                    //if (freqSkin > 0)
                    //{
                    //    int freqNSkin = nSkinTree.GetFreq(hsvPix);
                    //    if (freqSkin >= freqNSkin)
                    //        resultImg.Data[i, j, 0] = 255;
                    //}

                    double probSkin = skinTree.GetProb(hsvPix);

                    if (probSkin > 0.0)
                    {
                        double probNSkin = nSkinTree.GetProb(hsvPix);
                        if (probSkin >= probNSkin)
                        {
                            resultImg.Data[i, j, 0] = 255;
                        }
                    }
                }
            }

            return(resultImg);
        }