Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.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/9/opencv/3.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# Emgu图像从图像转换<;灰色,浮动>;去想象<;灰色,字节>;导致强度损失?_C#_Opencv_Emgucv - Fatal编程技术网

C# Emgu图像从图像转换<;灰色,浮动>;去想象<;灰色,字节>;导致强度损失?

C# Emgu图像从图像转换<;灰色,浮动>;去想象<;灰色,字节>;导致强度损失?,c#,opencv,emgucv,C#,Opencv,Emgucv,我们通过从原始图像中减去图像的拉普拉斯函数,对类型图像的灰度图像执行图像锐化。如果将结果保存为JPEG,则具有定义良好的边缘和对比度。但是,如果生成的图像转换为位图或“图像”” 并保存为JPEG,强度降低,锐化效果丢失。我怀疑转换为位图可能导致此问题。因此,我保存了一些中间图像,并将图像转换为“image”。这没有帮助。我还尝试用一种简单的方法缩放图像。这也无济于事 当我们执行拉普拉斯并从原始图像中减去合成图像时,上述行为也是正确的。插图如下(为简单起见,对代码进行了修改): 。。。 图像锐化图

我们通过从原始图像中减去图像的拉普拉斯函数,对类型图像的灰度图像执行图像锐化。如果将结果保存为JPEG,则具有定义良好的边缘和对比度。但是,如果生成的图像转换为位图或“
图像”
” 并保存为JPEG,强度降低,锐化效果丢失。我怀疑转换为位图可能导致此问题。因此,我保存了一些中间图像,并将图像转换为“
image
”。这没有帮助。我还尝试用一种简单的方法缩放图像。这也无济于事

当我们执行拉普拉斯并从原始图像中减去合成图像时,上述行为也是正确的。插图如下(为简单起见,对代码进行了修改):

。。。
图像锐化图像=锐化(过滤器、原始处理图像);
processeImage=锐化图像。ToBitmap();//或ProcessedImage.Bitmap;
ProcessedImage.Save(“ProcessedImage.jpg”);//导致强度损失
...
公共图像锐化(图像输入框)
{
ConvolctionKernelF-Ripper1Kernel=新的ConvolctionKernelF(新的浮点[,]{-1,-1,-1},{-1,8,-1},{-1,-1});
Image newFloatImage=inputFrame.Convert();
Image newcurrencedimage=newFloatImage.currension(锐化1kernel);
图像卷积ScaledShiftedImage=newFloatImage.AddWeighted(new卷积图像,1.0,1.0,0);
//添加用于测试的
concurvedScaledShiftedImage.Save(“concurvedScaledShiftedImage.jpg”);
//现在尝试缩放和保存:
Image scaledImageFloat=卷积的scaledAddedimage.Clone();
图像缩放图像浮动2=缩放图像(缩放图像浮动);
//添加用于测试的
scaledImageFloat.Save(“ScaledImage.jpg”);
//添加用于测试的
scaledImageFloat2.Convert().Save(“ScaledImage-8Bits.jpg”);
//这两种方法都返回较低强度的图像
返回scaledImageFloat2.Convert();
返回ConvertedScaledShiftedImage.Convert();
}
虽然卷积ScaledShifteimage.jpeg更亮,对比度更好,“ScaledImage.jpeg”和“ScaledImage-8Bits.jpeg”与卷积ScaledShifteimage.jpeg相比失去了强度级别。ProcesseImage.jpeg也是如此

下面是ScaleImage。这并不是真的必要。由于转换强度降低,我尝试进行转换并检查:

Image<Gray, float> ScaleImage(Image<Gray, float> inputImage)
{
    double[] minValue;
    double[] maxValue;
    Point[] minLocation;
    Point[] maxLocation;

    Image<Gray, float> scaledImage = inputImage.Clone();

    scaledImage.MinMax(out minValue, out maxValue, out minLocation, out maxLocation);

    double midValue = (minValue[0] + maxValue[0] ) / 2;
    double rangeValue = (maxValue[0]) - (minValue[0]);
    double scaleFactor = 1 / rangeValue;
    double shiftFactor = midValue;

    Image<Gray, float> scaledImage1 = scaledImage.ConvertScale<float>(1.0, Math.Abs(minValue[0]));
    Image<Gray, float> scaledImage2 = scaledImage1.ConvertScale<float>(scaleFactor * 255, 0);

    return scaledImage2;
}
图像缩放图像(图像输入图像)
{
双[]最小值;
双[]最大值;
点位置;
点[]最大位置;
图像缩放图像=inputImage.Clone();
MinMax(out minValue、out maxValue、out minLocation、out maxLocation);
双中值=(最小值[0]+最大值[0])/2;
双范围值=(最大值[0])-(最小值[0]);
双刻度因子=1/范围值;
双移位因子=中值;
Image scaledImage1=scaledImage.ConvertScale(1.0,Math.Abs(minValue[0]);
图像缩放图像2=缩放图像1.ConvertScale(缩放因子*255,0);
返回缩放图像2;
}
是否有人能提出可能出现的问题,以及为什么在上述操作中强度损失?谢谢

编辑:修复了格式问题。。。转换是从
Image
Image

编辑1月12日:我进一步深入研究了OpenCV代码,据我所知,当您将
image
类型的图像保存为JPEG时,
imwrite()
首先将图像转换为8位图像
image.convertTo()temp,CV\u 8U)并写入文件。使用
Convert()
执行相同操作时,强度不同。因此,目前尚不清楚两者之间的区别

Image<Gray, float> ScaleImage(Image<Gray, float> inputImage)
{
    double[] minValue;
    double[] maxValue;
    Point[] minLocation;
    Point[] maxLocation;

    Image<Gray, float> scaledImage = inputImage.Clone();

    scaledImage.MinMax(out minValue, out maxValue, out minLocation, out maxLocation);

    double midValue = (minValue[0] + maxValue[0] ) / 2;
    double rangeValue = (maxValue[0]) - (minValue[0]);
    double scaleFactor = 1 / rangeValue;
    double shiftFactor = midValue;

    Image<Gray, float> scaledImage1 = scaledImage.ConvertScale<float>(1.0, Math.Abs(minValue[0]));
    Image<Gray, float> scaledImage2 = scaledImage1.ConvertScale<float>(scaleFactor * 255, 0);

    return scaledImage2;
}