数字图像处理——作业2

Modified: 2013/03/25 14:35 by admin - Uncategorized
%作业2:显示lenna图像直方图,对图像做直方图均衡化,显示直方图均衡化后的图像和直方图

% 读取彩色lenna图像(请从课程主页下载)
[img,map] = imread('lenna.jpg');

% 转化为灰度图像
g = zeros(512,512);
for x=1:512
    for y=1:512
        % 对每一个像素的RGB分量分别乘以系数0.2989,0.5870,0.1140再相加
        g(x,y) = img(x,y,1) * 0.2989 + img(x,y,2) * 0.5870 + img(x,y,3) * 0.1140;
    end
end
g = uint8(g);

% 显示lenna灰度图像
figure;
imshow(g);

% 计算直方图
hist = zeros(256,1);
for x=1:512
    for y=1:512
        % 获取灰度值
        level = g(x,y)+1;
        % 累加
        hist(level) = hist(level)+1;
    end
end

% 显示直方图
figure;
bar(hist);

% 计算直方图的累积分布 CDF
cdf = zeros(256,1);
c = 0;
for l=1:256
    c = c + hist(l);
    cdf(l) = c;    
end

% 直方图均衡化
geq = uint8(zeros(512,512));
for x=1:512
    for y=1:512
        % 原灰度为 l 的像素被映射为灰度为 cdf(l)*256/(512*512)
        level = g(x,y)+1;
        geq(x,y) = cdf(level)*256/(512*512);
    end
end

%显示均衡化后的图像
figure;
imshow(geq);

% 计算均衡化后图像的直方图
hist = zeros(256,1);
for x=1:512
    for y=1:512
        % 获取灰度值
        level = geq(x,y)+1;
        % 累加
        hist(level) = hist(level)+1;
    end
end

% 显示直方图
figure;
bar(hist);

The end