public float EvaluateFitness(int index, Program.Settings settings) { Convolve(index, settings); Mat targetTmp = new Mat(); Mat dstTmp = new Mat(); targetImgs[index].ConvertTo(targetTmp, MatType.CV_32FC3); dstImg.ConvertTo(dstTmp, MatType.CV_32FC3); //targetTmp *= -1; //Cv2.Add(dstImg, targetTmp, targetTmp, null, MatType.CV_32F); Cv2.Absdiff(dstTmp, targetTmp, targetTmp); dstTmp.Dispose(); return(-(float)targetTmp.Sum()); }
public void Convolve(int index, Program.Settings settings) { dstImg = srcImgs[index].Filter2D(-1, kernels[0]); for (int i = 1; i < kernels.Length; i++) { //dstImg = dstImg.Filter2D(-1, kernels[i]); if (inSize.Width != settings.midLayerRes || inSize.Width != settings.outLayerRes)//Assuming width and height are the same { //This could be slow... float respos = ((i / ((float)kernels.Length - 1)) * 2); int size = (int)Lerp(Lerp(inSize.Width, settings.midLayerRes, respos), settings.outLayerRes, respos - 1f); size = ToNearestPowerOf2(size); Size nSize = new Size(size, size); Cv2.Resize(dstImg, dstImg, nSize); } Cv2.Filter2D(dstImg, dstImg, -1, kernels[i]); } //File.WriteAllBytes("tmpimg.png", dstImg.ToBytes()); }