非线性动态范围调整的MATLAB实现
实现程序如下图所示:
% 方法1:每一行每一列分开计算
% function [im_out]=dynamic_range(I)
function [im_out]=dip(I)
I = imread('img\person.jpg');
figure,imshow(I)
C = 105.8865; % C*lg(1+255)=255
[m,n,l] = size(I); %读取图像行数、列数
I = double(I); %将I数据转换为double类型
J = zeros(m,n,l);
for i=1:m
for j=1:n
J(i,j,:) = C*(log10(1+I(i,j,:)));
end
end
I = uint8(I);
J = uint8(J);
im_out = J;
figure,imshow(im_out)
end
% 方法2:对整个公式计算
% function [im_out]=dip(I)
% I = imread('img\person.jpg');
% figure,imshow(I)
% C = 105.8865; % C*lg(1+255)=255
% [m,n,l] = size(I); %读取图像行数、列数
% I = double(I); %将I数据转换为double类型
% J = C*(log10(1+I));
% I = uint8(I);
% J = uint8(J);
% im_out = J;
% figure,imshow(im_out)
% end
结果: