遥感图像数据大多为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 =

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

2173

被折叠的 条评论
为什么被折叠?



