python2%线性拉伸

核心要点

本方法是针对遥感数据的,因此使用了Gdal,如果你针对的是普通的图片,就直接使用cv2.imread()来读取即可,就不需要gdal了。
np.percentile()函数
np.clip()函数
cv2.split()函数
cv2.merge()函数
gdal的使用
本代码适用于ipython
若在编辑器下使用,需要自行的稍作修改
主体是函数TwoPercentLinear。

import numpy as np
import cv2
from matplotlib import pyplot as plt
def TwoPercentLinear(image, max_out=255, min_out=0):
    b, g, r = cv2.split(image)#分开三个波段
    def gray_process(gray, maxout = max_out, minout = min_out):
        high_value = np.percentile(gray, 98)#取得98%直方图处对应灰度
        low_value = np.percentile(gray, 2)#同理
        truncated_gray = np.clip(gray, a_min=low_value, a_max=high_value) 
        processed_gray = ((truncated_gray - low_value)/(high_value - low_value)) * (maxout - minout)#线性拉伸嘛
        return processed_gray
    r_p = gray_process(r)
    g_p = gray_process(g)
    b_p = gray_process(b)
    result = cv2.merge((b_p, g_p, r_p))#合并处理后的三个波段
    return np.uint8(result)
from osgeo import gdal
from osgeo import gdal_array
#matplotlib inline
#下面的部分都是读取遥感图像和显示的部分,与拉伸无关
filename = 'tiffbigcut.tif'
dataset = gdal.Open(filename)
datatype = dataset.GetRasterBand(1).DataType
image = np.zeros((dataset.RasterYSize, dataset.RasterXSize, dataset.RasterCount), dtype = gdal_array.GDALTypeCodeToNumericTypeCode(datatype))
for b in range(dataset.RasterCount):
    band = dataset.GetRasterBand(b + 1)
    image[:, :, b] = band.ReadAsArray()
result = TwoPercentLinear(image)
#plt.imshow(result)

在这里插入图片描述
在这里插入图片描述
前后的效果是显著的

  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值