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

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

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

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

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

Q&A

0回答

561閲覧

pydicomを使った、dicom画像の表示の際のバグ?

okstu

総合スコア0

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Python

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

0グッド

0クリップ

投稿2023/01/23 05:55

編集2023/01/23 07:19

------### 前提
jpeg画像からdicom画像に変換させたものを、元のjpeg画像のRGBと比較して、変換過程で画像に変化がないかを調べています。

pydicomを使い、dicom画像を表示させたいのですが、
表示させたとたん元のJPEG画像と比べ、かなりの色の変化が起きてしまいます。

Googleで見つけた、ビューアーなどでdicom画像を表示したときは正常な色で表示されます。
人の目で見た感じでは、見分けはつきません。

実現したいこと

・JPG画像をDICOM画像に変換した際、画質の変化など正常に変換できているか内積(RGB)を用いての確認

発生している問題・エラーメッセージ

・まったく同じJPG画像を使った内積の計算はできているのですが、JPGとDICOMを比べようとした際、DICOM画像の色が元のJPG画像と比べ画像表示するとき、ネオンカラーが強め?みたいな色に変化します。そのため、画像のRGBの配列も変化してしまい、比べることができません。

・エラーメッセージはありません

該当のソースコード

python ソースコード1 import matplotlib.pyplot as plt #画像を表示するためのモジュール import cv2 #OpenCVをインポート import numpy as np #numpyをインポート #import pydicom img = cv2.imread("~~~.JPG") #画像の読み込み img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) #色配置の変換 BGR→RGB img2 = pydicom.read_file("~~~.dcm") #画像の読み込み img2 = img2.pixel_array #img2 = cv2.imread("~~~.JPG") #画像の読み込み #JPG同士で試しただけです #img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2RGB) #色配置の変換 BGR→RGB img_array = np.array(img) #numpyで扱える配列をつくる img2_array = np.array(img2) #numpyで扱える配列をつくる print(img_array) print(img2_array) #JPEG plt.imshow(img_array) plt.show() #JPEG解像度表示 filename = '~~~.JPG' img = cv2.imread(filename, cv2.IMREAD_GRAYSCALE) height, width = img.shape[:2] print(f'Height: {height}, Width: {width}') #JPEG2 plt.imshow(img2_array) plt.show() #JPEG解像度表示 filename = '~~~.JPG' img2 = cv2.imread(filename, cv2.IMREAD_GRAYSCALE) height, width = img2.shape[:2] print(f'Height: {height}, Width: {width}') #内積の計算 ans=[] for x in range(height): for y in range(width): a = (int(img_array[x,y,0])*int(img2_array[x,y,0]))+(int(img_array[x,y,1])*int(img2_array[x,y,1]))+(int(img_array[x,y,2])*int(img2_array[x,y,2])) b = (np.sqrt(((img_array[x,y,0]**2+img_array[x,y,1]**2+img_array[x,y,2]**2) * (img2_array[x,y,0]**2+img2_array[x,y,1]**2+img2_array[x,y,2]**2)))) c=a/b #if (c in ans)==False: ans.append(c) ans_sum = sum(ans) ans = ans_sum/(height*width) print(ans) #1.0になれば内積1より、同じ画像としてみなせる #------------------------------------------------------------------------------------------------------------------- ソースコード2 #ここでは、DICOM画像を表示させようとしています。 import matplotlib.pyplot as plt #画像を表示するためのモジュール %matplotlib inline import cv2 #OpenCVをインポート import numpy as np #numpyをインポート import pydicom img = cv2.imread("~~~.JPG") #画像の読み込み img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) #色配置の変換 BGR→RGB img2 = pydicom.dcmread("~~~.dcm") #画像の読み込み img2 = img2.pixel_array #img2 = cv2.cvtColor(img2, cv2.COLOR_BGR2RGB) #色配置の変換 BGR→RGB img_array = np.array(img) #numpyで扱える配列をつくる #img2_array = np.array(img2) #numpyで扱える配列をつくる print(img_array) print(img2) #JPEG plt.imshow(img_array) plt.show() #JPEG解像度表示 filename = 'IMG_0109.JPG' img = cv2.imread(filename, cv2.IMREAD_GRAYSCALE) height, width = img.shape[:2] print(f'Height: {height}, Width: {width}') plt.imshow(img2) plt.show() ### 試したこと BGR→RGBの変換 ### 補足情報(FW/ツールのバージョンなど) 実習中の課題についての質問につき、企業からいただいたものなので、JPG画像とDICOM画像の提供はできません。DICOM画像はJPG画像が変換されたものを使用しています。 よろしければ、回答者様のほうで、画像の調達・変換をよろしくお願いいたします。 ソースコード1とソースコード2は組み合わせられればと考えております。 未熟な学生なもので、かなりきたないコードですがよろしくお願いします。

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

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

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

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

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

can110

2023/01/23 06:42

- 第三者が検証、実行できるような再現手順、コード、画像データ - 現状(異常)と理想(正しい)結果のイメージ といった具体的なものを提示すると回答得られやすくなるかと思います。 (面倒くさければ無視してください)
can110

2023/01/23 08:02

よろしければ、質問者様のほうで現象が再現できる Web上で公開されているような第三者が容易に調達できる画像の調達・変換、提示をよろしくお願いします。 (面倒くさければ無視してください)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問