从Image 到Image 的Emgu图像转换导致强度损失?

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

当我们执行拉普拉斯并从原始图像中减去结果图像时,上述行为也是如此。 插图如下(为简单起见,代码已经过修改):

 ... Image sharpenedImage = Sharpen(filter, originalprocessedImage); ProcessedImage = sharpenedImage.ToBitmap(); // Or ProcessedImage.Bitmap; ProcessedImage.Save("ProcessedImage.jpg"); // results in intensity loss ... public Image Sharpen(Image inputFrame) { ConvolutionKernelF Sharpen1Kernel = new ConvolutionKernelF (new float[,] { { -1,-1,-1 }, { -1, 8,-1 }, { -1,-1,-1 } }); Image newFloatImage = inputFrame.Convert(); Image newConvolutedImage = newFloatImage.Convolution(Sharpen1Kernel); Image convolutedScaledShiftedImage = newFloatImage.AddWeighted(newConvolutedImage, 1.0, 1.0, 0); // added for testing convolutedScaledShiftedImage .Save("ConvolutedScaledShiftedImage .jpg"); //Now try to scale and save: Image scaledImageFloat = convolutedScaledAddedImage.Clone(); Image scaledImageFloat2 = ScaleImage(scaledImageFloat); // added for testing scaledImageFloat.Save("ScaledImage.jpg"); // added for testing scaledImageFloat2.Convert().Save("ScaledImage-8Bits.jpg"); // both of these return the images of lower intensity return scaledImageFloat2.Convert(); return convolutedScaledShiftedImage.Convert(); } 

虽然ConvolutedScaledShifteImage.jpeg更亮并且具有更好的对比度,但与ConvolutedScaledShifteImage.jpeg相比,“ScaledImage.jpeg”和“ScaledImage-8Bits.jpeg”已经失去了强度级别。 ProcessedImage.jpeg也是如此。

ScaleImage如下。 这不是必要的。 由于转换失去了强度,我尝试进行转换并检查:

 Image ScaleImage(Image inputImage) { double[] minValue; double[] maxValue; Point[] minLocation; Point[] maxLocation; Image 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 scaledImage1 = scaledImage.ConvertScale(1.0, Math.Abs(minValue[0])); Image scaledImage2 = scaledImage1.ConvertScale(scaleFactor * 255, 0); return scaledImage2; } 

是否有人能够提出可能出现的问题以及为什么在上述行动中失去了强度? 谢谢。

编辑:修复格式问题…转换是从ImageImage

编辑12月1日:我进一步挖掘OpenCV代码,据我所知,当您保存Image到JPEG类型的Imageimwrite()首先将图像转换为8位图像image.convertTo( )temp, CV_8U ); 并写入该文件。 当使用Convert()执行相同的操作时,强度不同。 所以,目前尚不清楚两者之间有什么区别。