Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将负值标准化的正确方法是什么?_C#_Image Processing_Convolution - Fatal编程技术网

C# 将负值标准化的正确方法是什么?

C# 将负值标准化的正确方法是什么?,c#,image-processing,convolution,C#,Image Processing,Convolution,假设我使用以下内核执行了卷积运算: double[,] image = ImageDataConverter.ToDouble2d(lena); double[,] kernel = new double[,] { { 2, 0, 0, }, { 0,-1, 0, }, { 0, 0,-1, }, }; double[,] conv = Convol

假设我使用以下内核执行了卷积运算:

double[,] image = ImageDataConverter.ToDouble2d(lena);
double[,] kernel = new double[,] { { 2, 0, 0, }, 
                                   { 0,-1, 0, }, 
                                   { 0, 0,-1, }, };  
double[,] conv = Convolution.LinearConvolutionInSpatialDomain(image, kernel );  
可以理解的是,与该内核的卷积将在2d双数组中产生一些负值

显然,以下方法:

    public static void Rescale(double[,] convolve)
    {
        int imageWidth = convolve.GetLength(0);
        int imageHeight = convolve.GetLength(1);

        double maxAmp = 0.0;

        for (int j = 0; j < imageHeight; j++)
        {
            for (int i = 0; i < imageWidth; i++)
            {
                maxAmp = Math.Max(maxAmp, convolve[i, j]);
            }
        }

        double scale = 1 / maxAmp;

        for (int j = 0; j < imageHeight; j++)
        {
            for (int i = 0; i < imageWidth; i++)
            {
                double d = convolve[i, j] * scale;
                convolve[i, j] = d;
            }
        }
    }
公共静态无效重缩放(双[,]卷积)
{
int imageWidth=convolve.GetLength(0);
int imageHeight=卷积GetLength(1);
双最大值=0.0;
对于(int j=0;j
无法在0-1之间重新缩放这些值


那么,实现标准化的标准程序是什么呢?

您可以找到最小值和最大值。将刻度更改为
double scale=1/(Math.abs(minAmp)+maxAmp)
,并在应用刻度之前添加
minAmp


double d=(convalve[i,j]+Math.abs(minAmp))*scale

我使用了以下函数来解决我的问题:

    private static double Constraint(double value, double minRange, double maxRange, 
                                           double minVal, double maxVal)
    {
        return (((value - minVal) / (maxVal - minVal)) * 
                  (maxRange - minRange) + minRange);
    }

此函数是基于

编写的。基本上,您首先用最小值移动数据,以获得所有正值。然后对正值应用相同的操作。