------### 前提
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は組み合わせられればと考えております。 未熟な学生なもので、かなりきたないコードですがよろしくお願いします。
あなたの回答
tips
プレビュー