从您的评论来看,您只需要一个线性地图,其强度为< 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;
请注意我是如何截断强度的. 50和> 205. MATLAB在索引1处开始索引,因此我们需要将强度偏移1,以便它们正确映射到从0开始的像素强度.
要最终将其应用于您的图像,您所要做的就是:
out = LUT(img + 1);
这是假设img是您的输入图像.再次,请注意,当MATLAB在位置1开始索引时,我们必须将输入偏移1,而强度从0开始.
次要说明
您可以通过使用imadjust轻松完成此操作,这基本上是为您做的.你这样称呼它:
outAdjust = imadjust(in, [low_in; high_in], [low_out; high_out]);
low_in和high_in表示图像中存在的最小和最大输入强度.注意,这些在[0,1]之间归一化. low_out和high_out调整图像的强度,以便low_in映射到low_out,high_in映射到high_out,其他所有内容都是对比度延伸.对于你的情况,你会这样做:
outAdjust = imadjust(img, [0; 1], [50/255; 205/255]);
这应该拉伸对比度使得输入强度50映射到输出强度0并且输入强度205映射到输出强度255.任何强度<1. 50和> 205分别自动饱和到0和255.