我正在使用一个numpy蒙版数组来执行一些图像处理.设置了遮罩可处理围绕图像的NoData像素(必要边界,因为这些是地图投影图像,其原点位于无数据像素中).

使用以下代码块,我可以对图像执行高斯拉伸.

def gaussian_stretch(input_array, array_mean, array_standard_deviation, number_of_bins, n):

shape = input_array.shape

input_array = input_array.flatten()

#define a gaussian distribution, get binned GDF histogram

array_standard_deviation *= n

gdf = numpy.random.normal(array_mean, array_standard_deviation, 10000)

hist, bins = numpy.histogram(gdf, number_of_bins, normed=True)

cdf = hist.cumsum()

cdf = 256 * cdf / cdf[-1]

#interpolate and reshape

input_array = numpy.interp(input_array,bins[:-1],cdf)

input_array = input_array.reshape(shape)

return input_array

如果图像不包含NoData边框,则拉伸将按预期进行.在带有遮罩的图像上,遮罩将被忽略.这是预期的行为吗?关于如何仅处理未屏蔽数据的任何想法?

我尝试使用input_array.compressed(),但这将返回仅包含未屏蔽值的一维数组.如预期的那样,由于数组之间的大小差异,使用numpy.interp失败.

最后,我了解到使用numpy.random.normal并不总是会返回理想的高斯分布,并且一旦算法的其余部分起作用,我将添加一些误差约束.

解决方法:

您可以先获取input_array的掩码,并将其应用于结果数组,然后使用scipy.stats.norm计算正态分布的cdf,也可以使用scipy.special.erf()通过使用cdf公式计算cdf正态分布:

import scipy.stats as stats

def gaussian_stretch2(input_array, array_mean, array_standard_deviation, n):

mask = input_array.mask

n = stats.norm(array_mean, array_standard_deviation*n)

return numpy.ma.array(n.cdf(input_array), mask=mask)

标签:image-processing,arrays,python,numpy

来源: https://codeday.me/bug/20191208/2088753.html

python中input数组_python-numpy.interp和掩码数组相关推荐

  1. python一维数组和二维数组_Python numpy实现二维数组和一维数组拼接的方法

    Python numpy实现二维数组和一维数组拼接的方法 撰写时间:2017.5.23 一维数组 1.numpy初始化一维数组 a = np.array([1,2,3]); print a.shape ...

  2. python中grid函数_Python / NumPy中meshgrid的目的是什么?

    实际上文档中已经提到了np.mgrid的目的: np.mgrid 从坐标向量返回坐标矩阵. 在给定一维坐标数组x1,x2,...,xn的情况下,为N-D网格上的N-D标量/矢量场的矢量化评估制作N-D ...

  3. python中reshape函数_Python numpy.reshape函数方法的使用

    numpy.reshape numpy.reshape(a, newshape, order='C')    [source] 在不更改数据的情况下为数组赋予新的shape.参数 :a :array_ ...

  4. python中full函数_Python numpy.full_like函数方法的使用

    numpy.full_like numpy.full_like(a, fill_value, dtype=None, order='K', subok=True)[source] 返回与给定数组具有相 ...

  5. python中squeeze函数_Python numpy.squeeze()用法及代码示例

    当我们要从数组形状中删除一维条目时,将使用numpy.squeeze()函数. 用法: numpy.squeeze(arr, axis=None ) 参数: arr :[数组]输入数组. axis : ...

  6. python中argmin函数_Python numpy.argmin()用法及代码示例

    numpy.argmin(array,axis = None,out = None):返回特定轴上数组min元素的索引. 参数: array:Input array to work on axis : ...

  7. python中isin函数_Python numpy.isin函数方法的使用

    numpy.isin numpy.isin(element, test_elements, assume_unique=False, invert=False)     [source] 计算test ...

  8. python中mat函数_Python Numpy中的Matlab cell2mat函数?

    从某种意义上说,Python的"cells"比MATLAB-list长得多.python列表是1d单元格(或者更确切地说,大小为1维的单元格)的直接替代品.二维单元格可以表示为嵌套 ...

  9. python 中arange函数_Python numpy.arange函数方法的使用

    numpy.arange numpy.arange([start, ]stop, [step, ]dtype=None) 返回给定间隔内的均匀间隔的值. 在半开间隔[start,stop)(换句话说, ...

  10. python中input()函数的返回是什么类型_Python中input函数的用法是什么?

    "input()"函数是输入函数,用于接受一个标准输入数据,且返回string类型.在Python3中,去除了"raw_input()"函数,仅保留了" ...

最新文章

  1. Java基础笔记12
  2. 【数字信号处理】线性时不变系统 LTI ( 判断某个系统是否是 “ 非时变 “ 系统 | 案例三 )
  3. 思考并实现以下程序功能:实现一个抢红包的程序 java
  4. ITK:两个图像的全局配准(BSpline)
  5. 【ARM】Tiny4412裸板编程之Chip ID
  6. JetBrains CLion C++ IDE连接wsl2(Ubuntu)时,报错“Unable to establish SSL connection“解决方案
  7. Flutter开发系列教程
  8. 周边pd是什么意思_肿瘤百问百答(六)关于胃癌的PD-1抗体治疗,你应该知道些什么?...
  9. [转载] java 中 date类型详解
  10. eclipse 远程链接访问hadoop 集群日志信息没有输出的问题l
  11. 8 下半部和推后执行的工作
  12. 超感光徕卡电影四摄:华为Mate30系列国内开售
  13. 供应链三道防线(读书笔记)3(共4)
  14. 开源和互联网是天生的一对好基友
  15. 快速指数运算:平方-乘算法
  16. 什么是Express框架
  17. Unity中下载图片、音频和视频
  18. MISC:压缩包取证(zip爆破、明文攻击、伪加密、CRC32碰撞)
  19. c++ QT 反走样
  20. CentOS7.9安装教程,以及出现dracut- initqueue timeout-starting…starting timeout scripts 解决办法,linux配置静态IP地址

热门文章

  1. python界面编程实例_python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例...
  2. python编程可以自学么-怎么能学习好python编程?有自学的方法吗?
  3. python从入门到精通pdf百度云-跟老齐学Python:从入门到精通 完整版PDF[7MB]
  4. 化学人学python有前途吗-用Python解析化学公式
  5. android语音识别
  6. 谷歌云端语音识别软件
  7. qq纯黑主题怎么设置_qq背景变黑色,怎么调过来
  8. python用户画像_新闻个性化推荐系统源码之构建离线用户和文章特征
  9. dio设置自定义post请求_Flutter中的http网络请求
  10. cvpr2020 人脸检测与识别_CVPR2020 论文分类下载 「人脸识别+目标检测」