前提・実現したいこと
これらの画像のAugmetationをしたいと考えております。
12行目です。
ですが、どうしてか、エラーが出ます。
dicomは、mriで使われるかたちだけですので、固く考えずにお願いします。
###たた、ndarrayに変換してるだけです。画像と捉えてもらって構いません。
dicom = pydicom.read_file(path) data = dicom.pixel_array
発生している問題・エラーメッセージ
--------------------------------------------------------------------------- AssertionError Traceback (most recent call last) <ipython-input-306-99b7d201d73f> in <module>() 3 image_noise = gaussian_noise.augment_images([image]) 4 image_crop = crop.augment_images([image]) ----> 5 image_hue = hue.augment_images([image]) 6 image_trans = elastic_trans.augment_images([image]) 7 image_coarse = coarse_drop.augment_images([image]) 4 frames /usr/local/lib/python3.7/dist-packages/imgaug/augmenters/color.py in change_colorspace_(image, to_colorspace, from_colorspace) 274 assert image.shape[2] == 3, ( 275 "Expected number of channels to be three, " --> 276 "got %d channels (shape %s)." % (image.shape[2], image.shape,)) 277 278 if from_colorspace == to_colorspace: AssertionError: Expected number of channels to be three, got 1 channels (shape (512, 512, 1)).
該当のソースコード
from decimal import Decimal, ROUND_HALF_UP, ROUND_HALF_EVEN def load_dicom(path): dicom = pydicom.read_file(path) data = dicom.pixel_array data = data - np.min(data) # if np.max(data) > 300: if np.max(data) > 300 and np.mean(data)>= 0.155: data = data / np.max(data) data = (data * 255).astype(np.uint8) return data def visualize_sample( # brats21id, M, slice_i, # mgmt_value, types=("FLAIR", "T1w", "T1wCE", "T2w") # types="FLAIR" # types= "T1w" # types= "T1wCE" # types="T2w" ): # f ,ax=plt.subplots(2,2,figsize=(5,5)) plt.figure(figsize=(16, 5)) patient_path = os.path.join( "/content/drive/MyDrive/kaggle/Rsa/train/00000" # str(brats21id).zfill(5), ) # for i, t in enumerate(types, 1): # for i in range(M): # t_paths = sorted( # glob.glob(os.path.join(patient_path, types, "*")), # key=lambda x: int(x[:-4].split("-")[-1]) # ) for i, t in enumerate(types, 1): t_paths = sorted( glob.glob(os.path.join(patient_path, t, "*")), key=lambda x: int(x[:-4].split("-")[-1]), ) data = load_dicom(t_paths[int(len(t_paths) * slice_i)]) # plt.subplot(print(Decimal(np.sqrt(len(t_paths))).quantize(Decimal('1'), # rounding=ROUND_HALF_EVEN)),print(Decimal(np.sqrt(len(t_paths))).quantize(Decimal('1'), # rounding=ROUND_HALF_EVEN)),i) # plt.imshow(data) # plt.show() plt.subplot(1,4,i) # ax[i].plot(data) # a[] # ax[0, 0].plot(data[i]) # ax[0, 1].plot(data[i]) # ax[1, 0].plot(data[i]) # ax[1, 1].plot(data[i]) # axs[1, 0].scatter(data[0], data[1]) # axs[0, 1].plot(data[0], data[1]) # axs[1, 1].hist2d(data[0], data[1]) # plt.show() plt.imshow(data, cmap="gray") # plt.imshow(data), cmap="gray") plt.title(f"{t}", fontsize=16) plt.axis("off") # np.save('./fff/fff',data) # plt.suptitle(f"MGMT_value: {mgmt_value}", fontsize=16) plt.show() # import the library and helpers import imageio import imgaug as ia from imgaug import augmenters as iaa # use imageio library to read the image (alternatively you can use OpenCV cv2.imread() function) image = data # initialize the augmenters for demo rotate = iaa.Affine(rotate=(-25, 25)) # rotate image gaussian_noise = iaa.AdditiveGaussianNoise(scale=(10, 60)) # add gaussian noise crop = iaa.Crop(percent=(0, 0.4)) # crop image hue = iaa.AddToHueAndSaturation((-60, 60)) # change their color elastic_trans = iaa.ElasticTransformation(alpha=90, sigma=9) # water-like effect coarse_drop = iaa.CoarseDropout((0.01, 0.1), size_percent=0.01)# set large image areas to zero # get augmented images image_rotated = rotate.augment_images([image]) image_noise = gaussian_noise.augment_images([image]) image_crop = crop.augment_images([image]) image_hue = hue.augment_images([image]) image_trans = elastic_trans.augment_images([image]) image_coarse = coarse_drop.augment_images([image]) # create an array of augmented images for the demo images_aug = [image_rotated[0], image_noise[0], image_crop[0], image_hue[0], image_trans[0], image_coarse[0]] # plot augmentation examples plt.figure(figsize=(15,5)) plt.axis('off') plt.imshow(np.hstack(images_aug)) plt.title('Sample augmentations')
試したこと
1,先程、plotを分割してやろうとしたら、画像が小さすぎて、うまくいきませんでした。
https://teratail.com/questions/356704#reply-487138
2,
data[1]
などやって、いろいろ試してるのですが、できません、
3,
data = load_dicom(t_paths[int(len(t_paths) * slice_i)]) ##type===>ex) 00000/T1w types=("FLAIR", "T1w", "T1wCE", "T2w")
これは、この00000のディレクトリの厚みを、sliceで、取ってるだけです。どうして、4枚あるのかというと、
この00000のディレクトリのしたに4つあって、それと場合わけして、(4パターン)して、取ってるだけです。
4,enumerateで呼び出してみる
255にしたものが出てきます。
5,shapeと、1の小さすぎるの補足説明
なにか、いい方法がありませんでしょうか?
凄く困っています。
だれか、クールな回答ができる方は、お願いできたらと思います。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
Python3 (3.7.4)
Jupyter Lab version 1.1.4
macbookpro 16
#変更
回答1件
あなたの回答
tips
プレビュー