掩膜inf值或者NaN值

【转载】利用ENVI直接建立掩膜去除背景Inf值或NaN值  

2013-05-22 20:46:24|  分类: ENVI学习|举报|字号 订阅

有时候我们会遇到遥感影像的背景值为Inf(或其他坏值)的的情况,在ENVI中通过建立掩膜可以直接将背景值变为0(或者你需要的其他值)。如下图,其背景值是Inf值,那么下面,我们就通过掩膜操作将Inf变为0值。

步骤:建立掩膜——应用掩膜

具体操作如下:

  1. 为需要掩膜的文件建立掩膜文件:Basic Tools——Masking——Build Masking ,选择你需要为其建立掩膜的文件。

选择Mask Finite Values

  1. 掩膜文件建立完成之后,然后再对需要进行掩膜的文件应用该掩膜即可。

键入您需要的掩膜值:

最终结果:

背景值就修改为你需要的值了,如果上述Mask Value为10,其最后的背景值就为10。

图中代码运行报错, TypeError: cannot unpack non - iterable NoneType object ,意思是尝试对一个 NoneType (即为 None )的对象进行解包操作。在代码 reconstructed, binary_mask = wavelet_segmentation(ct_slice)  中, wavelet_segmentation 函数返回的是 None ,而代码却试图将其解包成两个变量 reconstructed 和 binary_mask ,所以报错。 解决方法: 检查 wavelet_segmentation 函数,确认其内部逻辑,确保该函数在执行完成后返回正确的,而不是 None 。比如查看函数中是否有正确的 return 语句,以及在各种条件分支下都能返回合适的数据。 可以在调用 wavelet_segmentation 函数的地方,先打印输出该函数的返回,看看是否是预期的结果,方便定位问题。根据以上代码报错修改以下代码def wavelet_segmentation(image, wavelet='db4', level=3, keep_percent=90): """执行小波变换分割(修正版)""" # 小波分解 coeffs = pywt.wavedec2(image, wavelet, level=level) # 系数阈处理(保持结构) threshold = np.percentile(np.abs(coeffs[0]), 100 - keep_percent) # 正确处理近似系数和细节系数 coeffs_filtered = [pywt.threshold(coeffs[0], threshold, mode='soft')] # 处理近似系数 # 逐层处理细节系数(保持元组结构) for detail_level in coeffs[1:]: filtered_detail = tuple( pywt.threshold(d, threshold, mode='soft') for d in detail_level ) coeffs_filtered.append(filtered_detail) # 图像重建与分割 reconstructed = pywt.waverec2(coeffs_filtered, wavelet) thresh = threshold_otsu(reconstructed) return reconstructed, (reconstructed > thresh).astype(np.uint8) # -*- coding: utf-8 -*- """ 腹腔CT合成与小波分割实验完整代码 环境要求:Python 3.8+,需提前执行 pip install numpy scipy matplotlib pywavelets scikit-image """ import numpy as np from scipy.ndimage import zoom import pywt from skimage.filters import threshold_otsu import matplotlib.pyplot as plt from sklearn.metrics import confusion_matrix # ====================== # 第一部分:CT数据合成 # ====================== def generate_synthetic_ct(size=256): """生成模拟腹部CT冠状面切片 参数说明: size - 三维体积的边长尺寸(默认256) 返回: 512x512的二维冠状面切片(已降采样) """ np.random.seed(42) # 固定随机种子保证可重复性 volume = np.zeros((size, size, size)) x, y, z = np.mgrid[:size, :size, :size] # 模拟脊柱(圆柱结构) spine_radius = size // 8 spine_mask = (x - size // 2) ** 2 + (z - size // 3) ** 2 < spine_radius ** 2 volume[spine_mask] = 1000 # 模拟骨密度 # 模拟腹部器官(椭球结构) organ_axis = (size // 1.5, size // 0.8, size // 1.2) organ_mask = ((x - size // 2) / organ_axis[0]) ** 2 + \ ((y - size // 2) / organ_axis[1]) ** 2 + \ ((z - size // 2) / organ_axis[2]) ** 2 < 1 volume[organ_mask] = 40 # 软组织密度 # 添加噪声并生成切片 volume += np.random.normal(0, 15, volume.shape) return zoom(volume[:, size // 2, :], 0.5) # 冠状面切片降采样 # ===================输出修改后的完整代码
03-16
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值