private void btn_Process_Click(object sender, EventArgs e) { if (bmpInput == null) { return; } denoiseAndDemoisaic.LoadNetwork("epoch_" + learningRate.ToString(CultureInfo.InvariantCulture) + "_" + noiseLevelsFolders[cmb_IsoValue.SelectedIndex] + "_1999.cnn"); if (bmpInput.PixelFormat == PixelFormat.Format32bppArgb) { inputImage8uC4.CopyToDeviceRoi(bmpInput, new NppiRect(0, 0, bmpInput.Width, bmpInput.Height)); //Convert C4 to C3 and BGR to RGB inputImage8uC4.Copy(inputImage8uC1, 0); inputImage8uC1.Copy(inputImage8uC3, 2); inputImage8uC4.Copy(inputImage8uC1, 1); inputImage8uC1.Copy(inputImage8uC3, 1); inputImage8uC4.Copy(inputImage8uC1, 2); inputImage8uC1.Copy(inputImage8uC3, 0); } else { inputImage8uC3.CopyToDeviceRoi(bmpInput, new NppiRect(0, 0, bmpInput.Width, bmpInput.Height)); inputImage8uC3.ColorTwist(twist); } inputImage8uC3.Convert(inputImage32f); inputImage32f.Div(new float[] { 255, 255, 255 }); NppiRect oldRoi = new NppiRect(0, 0, inputImage32f.WidthRoi, inputImage32f.HeightRoi); IEnumerable <Tiler.RoiInputOutput> rois = Tiler.GetROIs(oldRoi, TileSize, 0); foreach (var roi in rois) { inputImage32f.SetRoi(roi.inputROI); tile.ResetRoi(); inputImage32f.Copy(tile); tile.SetRoi(roi.outputROI); imageBayer.SetRoi(roi.positionInFinalImage); createBayerKernel.RunSafe(CuRandStates, tile, imageBayer, noiseLevels[cmb_IsoValue.SelectedIndex], 0); } imageBayer.SetRoi(oldRoi); inputImage32f.SetRoi(oldRoi); deBayerGreenKernel.RunSafe(imageBayer, inputImage32f, new float3(), new float3(1, 1, 1)); deBayerRedBlueKernel.RunSafe(imageBayer, inputImage32f, new float3(), new float3(1, 1, 1)); inputImage32f.Mul(new float[] { 255, 255, 255 }, noiseImage32f); noiseImage32f.Convert(noisyImage8u, NppRoundMode.Near); noisyImage8u.ColorTwist(twist); noisyImage8u.CopyToHostRoi(bmpNoisy, new NppiRect(0, 0, bmpNoisy.Width, bmpNoisy.Height)); inputImage32f.Sub(new float[] { 0.5f, 0.5f, 0.5f }); CudaStopWatch csw = new CudaStopWatch(); csw.Start(); denoiseAndDemoisaic.RunImage(inputImage32f, resultImage32f); csw.Stop(); Console.WriteLine("Needed time: " + csw.GetElapsedTime() + " [msec]"); csw.Dispose(); resultImage32f.Add(new float[] { 0.5f, 0.5f, 0.5f }); resultImage32f.Mul(new float[] { 255, 255, 255 }); resultImage32f.Convert(resultImage8u, NppRoundMode.Near); resultImage8u.ColorTwist(twist); resultImage8u.SetRoi(0, 0, bmpResult.Width - 16, bmpResult.Height - 16); resultImage8u.CopyToHostRoi(bmpResult, new NppiRect(8, 8, bmpResult.Width - 16, bmpResult.Height - 16)); pictureBox2.Image = bmpNoisy; pictureBox3.Image = bmpResult; }