直方图均衡化---图像处理

    xiaoxiao2021-03-25  143

    图像处理实验

    直方图均衡化

    程序清单:

    clc; close all; clear src_img = imread('cameraman.tif'); figure (1) %显示原始图像 subplot(321),imshow(src_img),title('原图像'); %显示原始图像直方图 subplot(322),imhist(src_img),title('原图像直方图'); %利用自己的函数做直方图均衡化 I=myHisteq(src_img); %显示均衡化后的图像 subplot(325),imshow(I),title('均衡化'); %显示均衡化图像直方图 subplot(326),imhist(I),title('均衡化直方图'); function I=myHisteq(src_img) % 获取图像的维数 [height,width] = size(src_img); I=size(src_img); % 原始图像灰度级 k=256, % 保存图片中各个灰度级的像素的个数 pixelNum=zeros(1,256); % 统计图片中每个灰度级像素的个数 % 妙用: 图片中每个像素点的灰度值为 (0,255)之间的整数, % 而保存像素点个数的数组为一维数组,且为(1,256) % 所以可以通过灰度值加一得到数组的索引号,再将对应 % 位置的计数加一,从而可以统计出每个灰度级像素的个数。 for i=1:height for j=1:width pixelNum(src_img(i,j)+1)=pixelNum(src_img(i,j)+1) +1; end end % 归一化 即计算各个灰度级的概率 % 原始直方图 (Original histogram ) Sk=zeros(1,256); for i=1:256 Sk(i)=pixelNum(i)/(height*width*1.0); end % 累计直方图 (Cumulative histogram) Tk=zeros(1,256);% 保存累积后的概率 for i = 1:256 if i==1 Tk(i)=Sk(i); else Tk(i)=Tk(i-1)+Sk(i); end end subplot(323),bar(Tk),title('累计直方图'); % 取整扩展(Integral expansion) % 公式: pixelCumu = int[(L-1)*pixelCumu+0.5](L为灰度级) Tk(i) = uint8((256-1) .* Tk(i) + 0.5); % 对灰度值进行映射 for i=1:height for j=1:width I(i,j)=Tk(src_img(i,j)); end end

    实验结果:

      
    转载请注明原文地址: https://ju.6miu.com/read-24903.html

    最新回复(0)