使用OpenCV处理Xarray数据数组时形态学操作引发图像偏移问题
使用OpenCV形态学函数处理Xarray数据时的偏移与无数据值问题
问题概述
- 数据来源:通过rioxarray读取GeoTIFF生成的二进制Xarray DataArray列表(暂未整合为数据集的单个维度)
- 处理逻辑:将DataArray提取为NumPy数组后执行形态学闭运算(因OpenCV处理图像本质也是操作NumPy数组,故采用此方法)
- 异常现象:
- 数据每次迭代会按内核大小偏移,对比处理前后相同切片已确认该问题
- 运行时抛出Axis Limits cannot be NaN or Inf(轴限制不能为NaN或无穷大)错误
- 输出数组尺寸与原数组一致,但一角数据被截断,另一角出现无数据值(-1.798e+308)
- 用
cv.imread读取图像时相同流程可正常运行,目前仅能观察到偏移问题,无法确认闭运算是否生效
代码示例
import rioxarray as rxr import xarray as xr import cv2 as cv import numpy as np kSize = 15 # 内核大小 iters = 2 # 迭代次数 # binaryList是用xarray.where生成的多个二值图像DataArray列表 binaryCopy = binaryList[0].copy() # 从列表中复制一个DataArray(后续应整合到单个xr数据集中) inAttrs = binaryCopy.attrs.copy() # 复制属性用于后续还原 inDims = binaryCopy.dims inCoords = binaryCopy.coords kern = cv.getStructuringElement(cv.MORPH_RECT,(kSize,kSize)) # 创建方形内核 print(binaryCopy.data.shape) # 打印数据数组的形状(本质是NumPy数组) # 最初尝试直接用morphologyEx,结果不行,拆分步骤后问题依旧 # closed = cv.morphologyEx(binaryCopy.data, cv.MORPH_CLOSE, kern) dilated = cv.dilate(binaryCopy.data, kern, iters) closed = cv.erode(dilated, kern, iters) newBinaryArray= xr.DataArray(closed, coords=inCoords, dims=inDims, attrs=inAttrs) fig, ax = plt.subplots(nrows=1, ncols=2, sharey=True) # 绘制原始数据 binaryList[0].plot(ax=ax[0]) # 绘制闭运算处理后的数据 newBinaryArray.plot(ax=ax[1]) plt.rcParams['figure.figsize'] = (15,8)
现象对比
处理前(左)和处理后(右)的形态学闭运算结果:右侧图像底部和左侧出现蓝色条带,对应无数据值(-1.798e+308)。
内容的提问来源于stack exchange,提问作者blerbthe3rd
相关产品推荐
相关产品推荐

