您提供的Wikipedia代码段是正确的,可以使用以下MATLAB代码对图像进行规范化:
%% Create an Example Image:
rand('seed', 1982);
n = 16;
myImg= rand(n,n)*.2 + .5;
%% Normalize the Image:
myRange = getrangefromclass(myImg(1));
newMax = myRange(2);
newMin = myRange(1);
myImgNorm = (myImg - min(myImg(:)))*(newMax - newMin)/(max(myImg(:)) - min(myImg(:))) + newMin;
一些图像的问题在于它们虽然只占用一小部分可能的值.如果你的值可以在0和1之间,那么黑色将是0而白色将是1.但是,如果图像中最暗的点是.5而你的最亮点是.7那么它可能看起来已经被淘汰到你的处理或者用户何时可视化(请注意,由于这个原因,MATLAB的imagesc会在显示之前自动对图像进行规范化).
如果使用hist(myImg(:))查看图像的直方图,您可以了解图像实际使用的允许值的必须性.在标准化图像中,最小值将为0,最大值将为1(或您使用的任何范围).
实现此等式时常见的错误是没有正确放置括号,在缩放之前不减去图像的最小值,或者不在“newMin”中添加.
您可以在以下代码和图像中一起查看所有内容.请注意原始图像(1)如何仅使用空间(2)的一小部分,因此当我们不让imagesc自动缩放攀爬参数时,它看起来会褪色.然而,一旦我们归一化(3),图像具有非常暗和非常轻的值,并且直方图从0到1(4)一直延伸.虽然不清楚你的代码是做什么或不做什么,但将它与这个例子进行比较可以解决你的问题.
%% Create an Exa