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); }
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); }