protected override void Process(Image <Gray, byte> queryImage) { var data = DoRandomNoise(queryImage.Data, 0.3); OnNoisedImage?.Invoke(this, new CaptureArgs <Image <Bgr, float> >(new Image <Gray, byte>(data).Convert <Bgr, float>())); var result = Medianvolution(data, 6); OnResultImage?.Invoke(this, new CaptureArgs <Image <Bgr, float> >(new Image <Gray, byte>(result).Convert <Bgr, float>())); }
protected override void Process(Image <Gray, byte> queryImage) { //создаем гистограмму double[] points = new double[byte.MaxValue + 1]; var data = queryImage.Data; DataMatrixRenuming(ref data, b => { points[b]++; return(b); }); //стандартизируем ее points = points.Select(d => d / (data.GetLength(0) * data.GetLength(1))).ToArray(); //преобразуем к виду для отображения InitPointList(points); OnHistogramPoints?.Invoke(this, new CaptureArgs <List <Point> >(resPoints)); //производим нарастающую сумму for (int i = 1; i < points.Length; i++) { points[i] += (points[i - 1]); } for (int i = 0; i < points.Length; i++) { points[i] = points[i] * 255; } //преобразуем к виду для отображения InitPointList(points); OnHistogramResultPoints?.Invoke(this, new CaptureArgs <List <Point> >(resPoints)); var resultData = data; //применяем функцию на стандартное изображение DataMatrixRenuming(ref resultData, b => { return((byte)(points[b])); }); OnResultImage?.Invoke(this, new CaptureArgs <Image <Bgr, float> >(new Image <Gray, byte>(resultData).Convert <Bgr, float>())); }