image - 使用 MATLAB 中的查找表增加图像对比度

标签 image matlab image-processing lookup contrast

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

a = 2;
x = 0:255;
lut = 255 ./ (1+exp(-a*(x-127)/32));

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

enter image description here

目前一切顺利,但我该如何提高 50 到 205 之间像素值的对比度?变换映射的最终图应该是这样的:

enter image description here

最佳答案

从您的评论来看,您只需要一个线性 map ,其中强度为 < 50映射到 0,强度为 > 205映射到 255,其他所有内容都是两者之间的线性映射。您可以通过以下方式简单地执行此操作:

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 现在看起来像:

plot(0:255, LUT);
axis tight;
grid;

enter image description here

请注意当强度为 < 50 时我是如何截断强度的和 > 205 . MATLAB 从索引 1 开始索引,因此我们需要将强度偏移 1,以便它们正确映射到从 0 开始的像素强度。

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

out = LUT(img + 1); 

这是假设 img是你的输入图像。再次注意,我们必须将输入偏移 +1。因为 MATLAB 从位置 1 开始索引,而强度从 0 开始。


小注

您可以使用 imadjust 轻松完成此操作,这基本上是在幕后为您完成的。你这样调用它:

outAdjust = imadjust(in, [low_in; high_in], [low_out; high_out]);

low_inhigh_in表示图像中存在的最小和最大输入强度。请注意,这些在 [0,1] 之间进行了标准化。 . low_outhigh_out调整图像的强度,使 low_in映射到 low_out , high_in映射到 high_out ,其他一切都是在两者之间延伸的对比。对于你的情况,你会这样做:

outAdjust = imadjust(img, [0; 1], [50/255; 205/255]);

这应该拉伸(stretch)对比度使得输入强度 50映射到输出强度 0和输入强度 205映射到输出强度 255 .任何强度 < 50> 205自动饱和到 0255分别。

关于image - 使用 MATLAB 中的查找表增加图像对比度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25191218/

相关文章:

android - 如何在Android中将壁纸设置为设备的整个屏幕

matlab - 从矩阵中提取 block 对角线

matlab - 视觉里程计中的图像校正

matlab - 自适应阈值——最小误差阈值方法的实现

html - 图像沿文本

php - 我想将多个图像添加到 MySQL 数据库中

python - 为什么 `imshow` 以彩色显示 2D(非 RGB)数组,如何将这样的彩色图像导出到 .png 文件?

matlab - 在矩阵matlab中找到最接近的值

image - 检测图像中的纹理

python - OpenCV/Python : Error in cv2. add() 向图像添加数字