好吧,我正在编写一些用于图像处理的代码,而且大部分代码都是从一些旧的matlab代码转换成同一个进程。在我现在的那一点(过程的最后一步),我需要将一个数组作为索引传递给另一个数组。
一些背景知识:我将图像分成RGB波段或掩模。在代码的早期,我拍摄了所有图像(作为numpy数组)并沿着第三维度取了一个中值。我试图将RGB掩码作为参数传递,这样我就可以得到这些像素值的中值,并用0来代替RB像素。
Matlab中执行此操作的代码非常简单:
finalMedGreen_ROI(exp_i+1) = median(median(EXPMedian_ROI(GMask_ROI)));
其中GMask_ROI是一个数组,它是原始图像数据的感兴趣区域,EXPMedian_ROI是所有原始图像数据的中位数。)
我试图在python中复制它:
self.final_median_green_roi[image+1] = np.median(np.median(self.exposure_median_roi(self.green_mask_roi)))
我收到了这个错误:
TypeError: 'numpy.ndarray' object is not callable
我试图在np.median中简单地将两个数组作为参数传递。在这里,self.green_mask_roi是一个布尔值数组(绿色像素为true,其他所有为false。当我运行时:
self.final_median_green_roi[0,1] = np.median(np.median(self.dark_median_roi,self.green_mask_roi))
我收到了这个错误:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我不确定它是否建议使用布尔数组或数字中值数组,而我只是因为我是图像的新事实而做对了处理,我不太可能发现错误。有什么建议吗?
答案 0 :(得分:1)
使用numpy的内置蒙版数组:
... =np.median(np.median(np.ma.masked_array(self.dark_median_roi, self.green_mask_roi)))
这将通过创建第二个参数self.green_mask_roi的掩码并将其应用于1st self.dark_median_roi来创建一个新数组,这样就可以得到一个包含self.dark_median_roi所有原始元素的数组。也存在于self.green_mask_roi中。