【发布时间】:2017-12-09 10:50:49
【问题描述】:
好的,所以我正在编写一些用于图像处理的代码,其中大部分是从一些旧的 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 是一个布尔值数组(绿色像素为真,其他一切为假。当我运行这个时:
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()
我不确定它是否建议布尔数组或数字中位数数组,我宁愿把它做对,因为我是图像处理的新手,我不太可能发现错误.有什么建议吗?
【问题讨论】:
-
请说明您想通过放置 dark_median_roi 和 green_mask_roi 来实现什么。你不能做他们在示例中所做的事情,因为它们都是数组。在示例中,EXPMedianROI 是在 GMask_ROI 上调用的方法
-
数组是原始图像数据(以 RGGB 值表示的图像)。我正在尝试做的是收集每个绿色像素的中值。然后将中位数传递给更多次以将其压缩为奇异值。
-
那么你想求两个数组组合的中位数吗? (联合还是交叉点?)
-
就像我说的那样,其中一个数组充满了布尔值,所以我想更好的表达方式是我想关闭第一个数组中第二个数组中为假的每个值.
-
callable错误意味着您在数组上使用arr(idx)语法,而不是正确的索引语法arr[idx]。请记住,numpy中的索引语法不同。你们中的任何一个都在应该使用函数的地方使用数组。
标签: python arrays matlab numpy image-processing