【问题标题】:Normalization of an image图像的归一化
【发布时间】:2015-09-05 06:08:21
【问题描述】:

我对灰度图像应用了一些操作,现在我得到了新值,但问题是强度值现在小于 0,介于 0 和 255 之间,大于 255。对于 [0-255] 之间的值,有没问题,但对于强度值 255 存在问题,因为这些值不能出现在灰度图像中。

因此,我需要对这些值进行标准化,以便所有值(无论是负数还是大于 255 或其他任何值)都在 0 到 255 的范围内,以便显示图像。

为此我知道两种方法:

方法#1

newImg = ((255-0)/(max(img(:))-min(img(:))))*(img-min(img(:)))

其中min(img(:))max(img(:))是对输入图像img进行一些操作后得到的最小值和最大值。 min 可以小于 0,max 可以大于 255。

方法#2

我只是将所有小于 0 的值设为 0,将所有大于 255 的值设为 255,所以:

img(img < 0) = 0;
img(img > 255) = 255;

我尝试使用这两种方法,但使用第二种方法我得到了很好的结果,但第一种方法却没有。谁能告诉我是什么问题?

【问题讨论】:

  • 因为您使用 MATLAB 标记了您的帖子,但没有任何功能性 MATLAB 代码,所以我决定使用适当的 MATLAB 语法为您添加这些位。请让我知道这是否可以。如果没有,我可以回滚我的更改。
  • @rayryeng 感谢敌人添加了 matlab 代码。

标签: image matlab image-processing


【解决方案1】:

这完全取决于图像内容本身。这两种方法都是有效的,以确保值的范围在[0,255] 之间。但是,在您决定使用哪种方法之前,您需要问自己以下问题:

问题 #1 - 什么是我的形象?

您需要问的第一个问题是您的图片代表什么?例如,如果这是边缘检测器的输出,您选择的方法将取决于结果中看到的值的动态范围(在问题 #2 中有更多内容)。例如,如果像素分布良好且方差较低,则最好使用第二种方法。但是,如果动态范围有点小,那么您将需要使用第一种方法来提高结果的对比度。

如果输出是图像减法,那么最好使用第一种方法,因为您想要可视化像素之间的确切差异。截断结果不会很好地显示差异。

问题 #2 - 值的动态范围是多少?

您需要注意的另一件事是最小值和最大值的动态范围有多大。例如,如果最小值和最大值与[0,255] 的限制相差不大,那么您可以使用第一种或第二种方法,您不会注意到太大的差异。但是,如果您的值在[0,255] 内的一个小范围内,那么执行第一种方法会增加对比度,而第二种方法不会做任何事情。如果您的目标也是增加图像的对比度,并且强度在有效的[0,255] 范围内,那么您应该使用第一种方法。

但是,如果您的最小值和最大值与[0,255] 范围相差甚远,例如min=-50max=350,那么执行第一种方法就不是好兆头了 - 尤其是 如果灰度强度有很大的差异。我所说的巨大差异的意思是,您将拥有处于高范围内的值,处于低范围内的值,仅此而已。如果您使用第一种方法重新缩放,这将意味着最小值被推到 0,最大值被缩小到 255,其余的强度在两者之间缩放,因此对于那些较低的值,它们被缩放以便它们重新可视化为灰色。

问题 #3 - 我的图像是干净还是嘈杂?

这是没有多少人想到的。您的图像是否非常干净,或者是否有一些虚假的噪点?对于嘈杂的像素,第一种方法非常糟糕。如果您只有几个像素值非常大,但其他像素在[0,255] 的范围内,这将使所有其他像素相应地重新缩放,从而降低图像的对比度。您可能希望忽略这些像素的贡献,因此第二种方法更可取。

结论

因此,您所说的这两种方法都没有问题。您需要了解图像是什么、您在检查输出后看到的动态值范围以及这是清晰还是嘈杂的图像。您只需要做出明智的选择,牢记这两个因素。所以在你的情况下,第一个输出可能不起作用,因为你有很大的负值和很大的正值,而且这些值可能也很少。进行截断可能对您的应用程序更好。

【讨论】:

  • 我找到了一个图像的梯度,其中我有 min = -35 和 max= 50。第二种方法对我根本不起作用..根据你的说法,我认为第二种方法更比第一个合适。请提出建议。
  • 好的,我实际上会使用第一种方法,因为动态范围很小。让我将其添加到我的帖子中。
  • @Navdeep - 您还可以执行标准化,使平均值为 0,标准差为 1。基本上:out = (img - mean(img(:))) / std(img(:)); 完成此操作后,将第一种方法应用于此转换后的数据集。这是标准化图像的另一种方式。
  • 将平均值设为 0,标准差设为 1 是什么意思??
  • @Navdeep - 这是机器学习中的标准标准化技术。这意味着,一旦您转换数据,如果您试图找到图像的平均强度,它将为 0,而图像的标准差将为 1。这可以通过使用我描述的上述公式来实现在我给你的最后一条评论中。
猜你喜欢
  • 1970-01-01
  • 2015-08-04
  • 2015-01-12
  • 2015-01-15
  • 1970-01-01
  • 1970-01-01
  • 2016-12-18
  • 2014-03-04
相关资源
最近更新 更多