数字图像处理实验之对比度拉伸

一幅图像中,最高灰度级和最低灰度级的差成为对比度。一幅低对比度的图像,看起来细节会少很多。可以通过对比度拉伸提高图像对比度,显示更多细节。先来看看对比度拉伸的典型变换:
对比度拉伸典型变换
书本中(冈萨雷斯:数字图像处理第三版P69)的对比度拉伸变换函数图是这样的:

书中对比度拉伸变换函数图
图3.10(b)低对比度拉伸图中,最低灰度级为91,最高灰度级为138,并且要将灰度值拉伸至[0, 255]。阈值处理的函数的图像即为P64图3.2第二个图像,其中k = 109。
实验代码如下:

% 读入图像
img_1 = imread('Fig0310(b)(washed_out_pollen_image).tif');

% max():返回一个行向量,向量的第i个元素是矩阵A的第i列上的最大值。
% 再一次即可求得最高灰度级
r_max = max(max(img_1));
%max() 同理
r_min = min(min(img_1));

% 求输入图像的尺寸
[r, c] = size(img_1);

% 生成两张0图,一张用于对比度拉伸,一张用于阈值处理
img_2 = zeros(r, c);
img_3 = zeros(r, c);

% 将输入图像转换成double型
img_1s = double(img_1);

% 计算斜率
k = (255 - 0) / (r_max - r_min);
% 灰度级总和
sum = 0;

for x = 1 : r
    for y = 1 : c
        % 对每个像素点进行拉伸,并赋值到新图像
        img_2(x, y) = k * (img_1s(x, y) - r_min);
        % 求灰度级总和
        sum = sum + img_1s(x, y);
    end
end

% 求阈值,这里阈值为平均值
avg = sum / (r * c);

% 阈值处理
for x = 1 : r
    for y = 1 : c
        % 小于阈值赋值0
        if img_1s(x, y) < avg
             img_3(x, y) = 0;
         % 大于阈值赋值1
        else
            img_3(x, y) = 1;
        end
    end
end

% 转换
img_2 =  im2uint8(mat2gray(img_2));
img_3 =  im2uint8(mat2gray(img_3));
% 显示
subplot(131), imshow(img_1);
subplot(132), imshow(img_2);
subplot(133), imshow(img_3);

结果如下:
结果对比

  • 5
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值