数字图像处理实验之对比度拉伸、直方图均衡化和规定化

[实验内容]:
 一、运用Matlab对Lena进行对比度拉伸增强(利用 imadjust  )
 二、运用Matlab对图像进行直方图均衡化和规定化

Matlab版本:R2015a

一、运用Matlab对Lena进行对比度拉伸增强(利用 imadjust  )

 原图像Lena的灰度变换范围为[a,b],处理后的图像out的灰度变换范围为[c,d]
方法一:线性灰度变换运算的数学表达式得出的,对比度拉伸增强后的图像

in=imread('boy.tif'); 
        a=min(in(:));%原图像的灰度变换范围为[a,b]
        b=max(in(:));
        c=0;%处理后的图像out的灰度变换范围为[c,d],即[0,255]
        d=255;
        
        out = (d-c)/(b-a)*(in-a)+c;%线性灰度变换运算的数学表达式
        figure;
        subplot(1,2,1); imshow(in);title('原始图像');
        subplot(1,2,2); imshow(out);title('线性灰度变换对比度拉伸增强后的图像');

效果图: 

方法二:利用 imadjust得出的,对比度拉伸增强后的图像
J = imadjust(I,[low_in high_in],[low_out high_out],gamma)
该函数的作用是把原始图像中的小于low_in的像素值映射到low_out。把大于high_in的像素值映射到high_out。gamma是其他像素点的映射参数。

 low_in = double(min(in(:)))/255;%原始图像的最小像素
        high_in = double(max(in(:)))/255;%原始图像的最大像素
        low_out=0;
        high_out=1;
        out=imadjust(in,[low_in,high_in],[low_out,high_out]);
        figure;
        subplot(1,2,1); imshow(in);title('原始图像');
        subplot(1,2,2); imshow(out);title('imadjust,对比度拉伸增强后的图像');

效果图: 

  二、运用Matlab对图像进行直方图均衡化和规定化

 1、请利用循环编程计算图像“Lena.bmp”的直方图,利用imhist对比前面的直方图计算是否正确。在一个figure中显示imhist的结果和自己计算的结果,并做适当标注

 img_Lena= imread('Lena.bmp');
        [row,col]=size(img_Lena);%提取图像的高度和宽度
        zft=zeros(1,256);% 建立一个256列的行向量,以统计各灰度级的像素个数
        
        %记录每个灰度值的像素数目
        for i=1:row
            for j=1:col
                k=img_Lena(i,j); % k是像素点(i,j)的灰度值
      % 因为zft数组的下标是从1开始的,但是图像像素的取值范围是0~255,所以用zft(k+1)
                zft(k+1)=zft(k+1)+1; % 对应灰度值像素点数量加1
            end
        end
        figure;
        subplot(2,2,1);imshow(img_Lena);title('原图')
        subplot(2,2,2);bar(zft);title('循环bar灰度图像直方图')
        subplot(2,2,3);imhist(img_Lena);title('imhist检验')

效果图: 

%2、利用 histeq 对图像“Lena.bmp”进行直方图均衡化
        Original_lena = imread('Lena.bmp');
        histeq_lena = histeq(Original_lena);%使用直方图均衡增强对比度
        
        %3、将图像“Lena.bmp”直方图规定化为图像“boy.tif”的直方图,详细比较显示直方图均衡化、规定化前后直方图和图像的变化情况
        Original_boy=imread('boy.tif');
        imhist_boy=imhist(Original_boy);%boy图像数据的直方图 
        %J = histeq(I,hgram),对灰度图像I进行变换,使得输出灰度图像J的直方图与目标直方图hgram近似匹配。
        Lena_histeq_ImhistBoy=histeq(Original_lena,imhist_boy);
      
        %详细比较显示直方图均衡化、规定化前后直方图和图像的变化情况
        figure;
        subplot(2,2,1); imhist(Original_lena); title('原始Lena直方图');
        subplot(2,2,2); imhist(histeq_lena); title('Lena均衡直方图');
        subplot(2,2,3); imhist(Original_boy); title('原始boy直方图');
        subplot(2,2,4); imhist(Lena_histeq_ImhistBoy); title('正则化直方图');

效果图: 

 

 4、不使用 histeq ,自行编程实现对Lena图像进行直方图均衡

 I=imread('Lena.bmp');       
        [height, width] = size(I); 
        count = zeros(1, 256); % 统计每个像素值出现次数
        for i = 1 : height
           for j = 1 : width
              %k = I(i,j);
              count(I(i,j)+1 )= count(I(i,j)+1) + 1; 
           end
        end
        
        % 接下来,将频数值算为频率
        ProbPixel = zeros(1,256); % 统计各灰度级出现的频率
        ProbPixel=double(ProbPixel);count=double(count);
        
        % 统计每个像素值出现的概率, 得到概率直方图
        for i = 1 : 256
            ProbPixel(1,i) =count(1,i) / (height * width);
        end
        
        % 求累计概率,得到累计直方图
        for i=2:256
            ProbPixel(i)=ProbPixel(i-1)+ProbPixel(i);
        end
           
        %完善ProbPixel函数的定义
        for i = 1 : 256
            ProbPixel(i) = ProbPixel(i) * 255;
        end
    
        % 完成每个像素点的映射
        I=double(I);
        for i = 1 : height
           for j = 1 : width
              I(i,j) =  ProbPixel(I(i,j)+1); % 这里的v(i,j)不能为0,否则数组索引出错
           end
        end
       II=uint8(I);
  
        figure; 
        subplot(2,2,1); imshow(Original_lena); title('原始Lena图像');
        subplot(2,2,2); imshow(histeq_lena); title('Lena直方图均衡图像');
        subplot(2,2,3); imshow(Lena_histeq_ImhistBoy); title('正则化直方图图像');
        subplot(2,2,4); imshow(II); title('自己编写的直方图均衡化处理结果');

 效果图:

 如果有错,欢迎纠正

  • 2
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值