質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.45%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

1274閲覧

CoolなAugmentationしたいです。

Deep_passion

総合スコア45

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

PyTorch

PyTorchは、オープンソースのPython向けの機械学習ライブラリ。Facebookの人工知能研究グループが開発を主導しています。強力なGPUサポートを備えたテンソル計算、テープベースの自動微分による柔軟なニューラルネットワークの記述が可能です。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2021/08/29 08:26

編集2021/08/29 10:39

前提・実現したいこと

イメージ説明
これらの画像の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

#変更

イメージ説明

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2021/08/29 08:54

> AssertionError: Expected number of channels to be three, got 1 channels (shape (512, 512, 1)). カラー画像を想定したコードではないですか?
Deep_passion

2021/08/29 10:06

すいません、画像処理の前処理初めてでよくわからないです。つまりどういうことでしょうか?すいません、
Deep_passion

2021/08/29 10:16

3チャネルとか、rgbとかならわかるのですが、どういうことでしょうか・
Deep_passion

2021/08/29 10:38

ご返信ありがとうございます。3ちゃねるは、最後が1だからですよね?512,512,1,ってことです。 それと、どうして、このような、変な画像になってしまうのでしょうか? すいません、
Deep_passion

2021/08/29 10:39

おっしゃるとおりできたのですが、
guest

回答1

0

ベストアンサー

image_hue = hue.augment_images([image])にてAssertionError: Expected number of channels to be three, got 1 channels (shape (512, 512, 1)).が発生しているとのことですが、
imgaug.augmenters.color.AddToHueAndSaturationは下記の通り色相(Hue)、彩度(saturation)を操作するものなのでモノクロ画像には使えないのだと思われます。

Increases or decreases hue and saturation by random values.

The augmenter first transforms images to HSV colorspace, then adds random values to the H and S channels and afterwards converts back to RGB.

imgaug.augmenters.color

Data Augmentation: Packages Overviewはカラー画像を題材にしていますので、そのままのコードではモノクロ画像には適用できないものが出てくるのだと思います。
今回の場合はimage_hue = hue.augment_images([image])はコメントアウトすれば良いかと思います。

投稿2021/08/29 10:22

編集2021/08/29 10:24
meg_

総合スコア10609

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.45%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問