对遥感图像进行2%线性拉伸

本文介绍如何使用Matlab实现遥感图像的2%线性拉伸,通过计算直方图累积分布,确定拉伸阈值,将16位图像转换为8位图像,以改善视觉效果。

遥感图像数据大多为16位,在显示时要将其拉伸到0-255的区间范围,ENVI软件打开图像时默认使用2%的线性拉伸,思路是将直方图累积在2%和98%之间的像元值拉伸,取直方图累积在2%处对应的光谱值为MinValue,98%处对应的光谱值为MaxValue,那么可解释为如果像元值大于MinValue且小于MaxValue,则将其拉伸至0-255;如果像元值小于MinValue,那么将其改为MinValue;如果像元值大于MaxValue,那么将其改为255。

下面给出一个对直方图进行2%线性拉伸的例子

利用GDAL可以使用函数poBand->GetHistogram来得到波段的直方图,然后对直方图进行计算进行线性拉伸,并不复杂。

下面给出2%线性拉伸的Matlab代码供参考

cal_lr_val.m文件,对于输入的直方图,计算拉伸时应取的左值和右值

% ------------------------------------
% 计算直方图左右裁剪的灰度值
% 2015/07/01
%
% Input histcount --> 直方图
% tt --> 图像像素个数
% per --> 左右裁剪的百分比
% 
% Output l_val --> 左值
% r_val --> 右值
% ------------------------------------

function [l_val, r_val] = calc_lr_val(histcount, tt, per)

    fprintf(' ... ... ... ... ... ... ... ... ...\n');
    fprintf(' ... CALC LEFT AND RIGHT VALUE \n');

    per_tt = tt*per;  % 按百分比裁剪的像素个数 

    % 计算左值
    tmp = 0;
    for i = 1:length(histcount)
        tmp = tmp + histcount(i);
        if tmp >= per_tt
            l_val = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值