输入图像的灰度取值区间为f(m,n)∈[a,b]
线性变换后输出图像的灰度取值区间为g(m,n)∈[c,d],则变换过程的表达式为:
g(m,n)=c+k[f(m,n)-a] 其中k=(d-c)/(b-a),称为变换函数的斜率
扩展动态范围:
![22980b7d7c4dae6ce36d232fa2aca49a.png](https://i-blog.csdnimg.cn/blog_migrate/0a157390dfbbc5acbaabdda0efe969bd.png)
改变取值区间:
![5de5bcd689e5bfba0e3604145977e973.png](https://i-blog.csdnimg.cn/blog_migrate/73ff87665232ad29e770235729e177ec.png)
缩小动态范围:
![291fb4460b68b54bab3d50cf68149beb.png](https://i-blog.csdnimg.cn/blog_migrate/3082cffcb23fd499aeb67a5dd7527ccb.png)
举个例子:
%假定图像的灰度取值范围是[0, 240],试求一个能将灰度范围从[0, 120]线性压缩至[0, 80][120, 240]线性移位至[80, 200]的灰度变换函数,并画出该灰度变换函数的函数图
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)
![6dab81a9042c9a75bf37a19ae1bb2483.png](https://i-blog.csdnimg.cn/blog_migrate/ad7af1d012a943a78a6a5d654a6e5eb3.png)