python ITK GetPixel方法导致内存泄漏

最近使用ITK做图像配准,需要对图像进行像素级遍历,用以计算相似性度量函数,原生C++版ITK(Insight Toolkit)提供了一个Iterator机制应对这种大规模获取像素信息的情况,在ITK官方文档中也提到了若需高效获取像素值不宜使用GetPixel()、SetPixel()

Note that these two methods are relatively slow and should not be used in situations where high-performance access is required.(InsightSoftwareGuide-Book1-5.0.1 chapter4.1.3)

我先用C++版ITK大致实现了一遍,考虑到后续开发效率,我打算用python版的itk重写,其安装也十分方便,直接pip install itk即可。问题在于python版的ITK中没有提供Iterator机制的接口,起初为了方便起见,我直接使用GetPixel([i, j])来读取像素值,但是在一次次迭代过程中,我发现其占用的内存逐渐增加,迭代成百上千次以后内存会发生泄露。刚开始以为是nlopt库有问题,后来把问题定位到了GetPixel方法上,耽误了不少时间。
后来找到了一个python ITK官方文档,阅读以后发现可以将ITK图像转化为numpy数组,就试了试。

# Convert back to ITK, view only, data is not copied
itk_np_view = itk.image_view_from_array(np_copy)

# Convert back to ITK, data is copied
itk_np_copy = itk.image_from_array(np_copy)

将图像转化维numpy数组以后索引就简单了,同时内存泄漏问题就不再出现了。
python ITK官方文档:link

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值