图象直⽅图的线性变换——直⽅图拉伸
图象直⽅图的线性变换——直⽅图拉伸
灰度直⽅图是将数字图像的所有像素,按照灰度值的⼤⼩,统计其所出现的频度。直⽅图拉伸的公式是s= (r_2-r_1)/(s_2-s_1 ) (r-r_1 )+s_1
matlab代码:
clear ;
origin=imread('histogram2017.jpg');
[m,n,o]=size(origin);                            %测量图像尺⼨参数
GP=zeros(1,256);                            %预创建存放灰度出现概率的向量
for i=1:3
for k=0:255
GP(k+1)=GP(k+1)+length(find(origin(:,:,i)==k));      %计算每级灰度出现的概率
end
end
figure(1);subplot(2,2,1);bar(0:255,GP,'b')          %绘制直⽅图
axis([0255 min(GP) max(GP)]); title('原图像直⽅图');xlabel('灰度值');ylabel('出现概率')
subplot(2,2,2);imshow(origin);title('原图')
originR=origin(:,:,1);%分解到RGB三基⾊空间
originG=origin(:,:,2);
matlab直方图originB=origin(:,:,3);
MAX_R=double(max(max(originR)));%获得图像像素中灰度的最⼤值
afterR=double(originR)/MAX_R*256;%对灰度进⾏拉伸
MAX_G=double(max(max(originG)));%获得图像像素中灰度的最⼤值
afterG=double(originG)/MAX_G*256;%对灰度进⾏拉伸
MAX_B=double(max(max(originB)));%获得图像像素中灰度的最⼤值
afterB=double(originB)/MAX_B*256;%对灰度进⾏拉伸
after(:,:,1)=uint8(afterR);%合成为彩⾊图像
after(:,:,2)=uint8(afterG);
after(:,:,3)=uint8(afterB);
GP2=zeros(1,256);                            %预创建存放灰度出现概率的向量
for i=1:3
for k=0:255
GP2(k+1)=GP2(k+1)+length(find(after(:,:,i)==k));      %计算每级灰度出现的概率
end
end
figure(1);subplot(2,2,3);bar(0:255,GP2,'b')          %绘制直⽅图
axis([0255 min(GP2) max(GP2)]); title('处理后图像直⽅图');xlabel('灰度值');ylabel('出现概率')
subplot(2,2,4);imshow(after);title('处理后')
处理结果