在matlab中计算图像的log10

时间:2016-10-28 21:00:07

标签: matlab image-processing

如何在matlab中计算图像的log10以及图像的log10是什么意思? 和图像是灰度。 例如:

α= imread(' image.jpg的&#39);

im2bw(一,日志10);

我想知道log10如何影响图像?

1 个答案:

答案 0 :(得分:1)

1。对数对强度值的影响。

假设您有一个灰度图像。我们使用matlab提供的cameraman.tif图片。

Img = imread ('cameraman.tif');

此图像是uint8图像(即它可以采用0-255范围内的可能强度值),但实际上此特定图像的最小强度值为7,最大值为253.这有助于演示效果对数,因为没有值0(这将导致对数输出中的'减无穷')。

因此,为了证明当取对数时强度发生了什么,让我们首先从最小值到最大值采用线性范围的强度,以及该范围的对数。

Range    = double (min (Img(:)) : max (Img(:)));      
LogRange = log10 (Range);

现在让我们在[0,1]区间内对两者进行标准化并绘制范围。

NormalisedRange    = mat2gray (Range); 
NormalisedLogRange = mat2gray (LogRange);

subplot (1, 2, 1); plot (NormalisedRange);    axis tight square; title ('Normalised intensity values');
subplot (1, 2, 2); plot (NormalisedLogRange); axis tight square; title ('Normalised Log of intensity values');

enter image description here

因此,如果你应用对数变换,你可以向上移动强度,即你使像素更亮;转换前像素越暗,效果越大。

2。视觉对数的影响

让我们看看它如何看待实际图像及其对数变换(均标准化为[0,1]范围,如上所述)。 我们还将检查每个图像的直方图,即[0,1]范围内每个强度值的频率。

LogImg           = log10 (double (Img));
NormalisedImg    = mat2gray (Img);
NormalisedLogImg = mat2gray (LogImg);

subplot (2, 2, 1); imshow (NormalisedImg, [0, 1]);    axis image off; title ('Normalised Image');
subplot (2, 2, 2); imshow (NormalisedLogImg, [0, 1]); axis image off; title ('Normalised LogImage');
subplot (2, 2, 3); imhist (NormalisedImg); 
subplot (2, 2, 4); imhist (NormalisedLogImg);

enter image description here

你可以看到转换的效果一直是“照亮”画面,特别是,它特别改善了之前较暗区域的对比度(例如,男人的特征现在更加清晰)。

显然,缺点是对比度在“明亮”区域已经恶化,因为之前较暗的像素现在与较亮的像素紧密相连(例如,现在建筑物和天际线之间的区别不太明显)。

您还可以从直方图中确认强度分布已经大幅度转向更亮的值。