CBIS-DDSM pre-processing problem ValueError: the input array must have size 3 along `channel_axis`

以下是CBIS-DDSM 在pre-processing时遇到的问题。
想必有处理过此资料集的人都知道, 要经过一道步骤叫做CC和MLO部分的“removal pectoral muscle”
, 但我在处理的过程中一直遇到一个bug, 直接上图:
下图为edge canny 的code

img


然后是error讯息:
ValueError: the input array must have size 3 along channel_axis, got (354, 179, 4) 如圖

img


然后我试过另一个github主的code用在我自己的图片上也会有此类似问题如图:
附上他的github: (https://github.com/gsunit/Pectoral-Muscle-Removal-From-Mammograms)

img


"ValueError: the input array must have size 3 along channel_axis, got (4156, 2026)"
我資料集是在https://www.kaggle.com/datasets/awsaf49/cbis-ddsm-breast-cancer-image-dataset%E4%B8%8B%E8%BC%89
希望能帮忙解决, 不然就是也可以直接给我已经处理完的removal pectoral muscle data
感恩!
八十八祝各位發

補充: 網路上很多轉換的方法我都試過了(rgb2gray)等等,還是一直有通道的error出現。非常困擾之

根据你描述的问题,如果直接从错误信息的提示来看,是在skimg下的一个地方的代码抛出来的一个异常,意思是说输入的数组必须要有3个channel axis 但是代码中没有。因为这是这个包内部的代码,不是你写的代码,所以不存在说你写的代码有问题的说法,因此引起这个问题的原因可能有这两个:
一个是数据源的问题,你的数据源跟其它博主的不一样,数据中某处数据格式有问题或者不符合这个包下面所要求的格式。
还有一个可能是库和工具的版本问题。
因此,解决方法就是核对下版本的问题自己对照下数据源。

检查一下数据预处理啊,你的图片是4通道的,但是你的这里是三通道转灰度图报错。

img

这个函数要求的图片通道数应该是3,确认下你的第4通道数据有无用(有些数据集为了方便会将mask数据存在第四通道),还是说你的第4通道是标注文件的mask图像。如果是标注的话,直接通道分离一下,第四通道是lables,其他前面三个通道就是图片输入。
如果不是的话,直接使用color.rgba2rgb()转一下将4通道变成三通道的数据,然后color.rgb2gray()再转为gray;或者直接在io.imread("xxx.png",as_gray=True)加上标志位直接读取灰度图即可