首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用MATLAB中的查表提高图像对比度

利用MATLAB中的查表提高图像对比度
EN

Stack Overflow用户
提问于 2014-08-07 20:02:04
回答 2查看 2.9K关注 0票数 3

我试图做一些图像处理,为我提供了一个8位灰度图像。我应该通过生成一个在50到205之间增加像素值对比度的查找表来改变图像的对比度。我使用下面的MATLAB代码生成了一个查找表。

代码语言:javascript
复制
a = 2;
x = 0:255;
lut = 255 ./ (1+exp(-a*(x-127)/32));

当我绘制lut时,我得到了如下图形:

到目前为止还不错,但是我如何提高像素值在50到205之间的对比度呢?转换映射的最终绘图应该如下所示:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-07 20:50:52

从您的注释来看,您只需要一个线性映射,其中< 50的强度被映射到0,而> 205的强度被映射到255,其他的都是在两者之间的线性映射。您可以简单地通过以下方法来完成:

代码语言:javascript
复制
slope = 255 / (205 - 50); % // Generate equation of the line - 
                          % // y = mx + b - Solve for m
intercept = -50*slope; %// Solve for b --> b = y - m*x, y = 0, x = 50
LUT = uint8(slope*(0:255) + intercept); %// Generate points
LUT(1:51) = 0; %// Anything < intensity 50 set to 0
LUT(206:end) = 255; %// Anything > intensity 205 set to 255

LUT现在看起来像是:

代码语言:javascript
复制
plot(0:255, LUT);
axis tight;
grid;

请注意,当强度为< 50> 205时,它们是如何截断的。MATLAB开始索引索引在索引1,所以我们需要抵消强度1,以便他们正确地映射到像素强度,从0开始。

为了最终将其应用到您的图像中,您所需要做的就是:

代码语言:javascript
复制
out = LUT(img + 1); 

这是假设img是您的输入映像。再次注意,当MATLAB在位置1开始索引时,我们必须抵消+1的输入,而强度从0开始。

小音符

您可以通过使用imadjust轻松地做到这一点,这基本上是在幕后为您完成的。你这样称呼它:

代码语言:javascript
复制
outAdjust = imadjust(in, [low_in; high_in], [low_out; high_out]);

low_inhigh_in表示图像中存在的最小和最大输入强度。注意,这些都是在[0,1]之间标准化的。low_outhigh_out调整图像的强度,以便low_in映射到low_outhigh_in映射到high_out,其他一切都在两者之间展开对比。就你的情况而言,你可以:

代码语言:javascript
复制
outAdjust = imadjust(img, [0; 1], [50/255; 205/255]);

这应该扩展对比度,以便输入强度50映射到输出强度0,而输入强度205映射到输出强度255。任何强度的< 50> 205都会自动饱和到0255

票数 5
EN

Stack Overflow用户

发布于 2014-08-07 20:12:36

您需要获取图像中的每个像素,并将其替换为查找表中的相应值。这可以用一些嵌套的for循环来完成,但这不是最惯用的方法。我建议使用arrayfun和替换像素的函数。

代码语言:javascript
复制
new_image = arrayfun(@(pixel) lut(pixel), image);

使用直接在映像上生成lut的代码可能更有效。如果性能是需要考虑的,并且不需要使用查找表,请尝试比较这两种方法。

代码语言:javascript
复制
new_image = 255 ./ (1 + exp(-image * (x-127) / 32));

注意,new_image变量将不再是uint8类型。如果您需要再次显示它(例如,使用imshow),则需要通过编写uint8(new_image)将其转换回来。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25191218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档