输入图像的灰度取值区间为f(m,n)∈[a,b]
线性变换后输出图像的灰度取值区间为g(m,n)∈[c,d],则变换过程的表达式为:
g(m,n)=c+k[f(m,n)-a] 其中k=(d-c)/(b-a),称为变换函数的斜率
扩展动态范围:
改变取值区间:
缩小动态范围:
举个例子:
%假定图像的灰度取值范围是[0, 240],试求一个能将灰度范围从[0, 120]线性压缩至[0, 80][120, 240]线性移位至[80, 200]的灰度变换函数,并画出该灰度变换函数的函数图
x=(0:1:240);
a=0;
b=120;
c=0;
d=80;
e=240;
f=200;
k=(d-c)./(b-a);
y=(c+k.*(x-a)).*(b>x&x>a)+((x-b)/(b)*b+d).*(e>=x&x>=b);
plot(x,y);
I=imread('firework.JPG');
J=imadjust(I,[0.1 0.5],[]);
% subplot(1,2,1),imshow(I);
% subplot(1,2,2),imshow(J);
I_gray = rgb2gray(I);
% I_gray_uint8=uint8(I_gray);
I_gray_double=double(I_gray);
[rows,cols]=size(I_gray_double);
for i =1:rows
for j=1:cols
if I_gray_double(i,j)<50
I_gray_double_fin(i,j)=(I_gray_double(i,j)-0).*((100-0)./(50-0))+0;
else
I_gray_double_fin(i,j)=I_gray_double(i,j);
% if I_gray_uint8(i,j)
% I_gray_uint8(i,j)=225-I_gray_uint8(i,j);
%
end
end
end
fin_I_gray=I_gray_double_fin./255;
% fin_I = rgb(fin_I_gray);
subplot(1,2,2),imshow( fin_I_gray);
subplot(1,2,1),imshow(I_gray)