2 つの dicom 画像があり、以下のコードを使用して画像の平均二乗誤差を計算できます。ただし、ある画像を別の画像と比較すると固有のずれが生じる可能性があります (イメージャーの位置がわずかにずれている場合)。2 つの numpy 配列のシフトを計算する簡単な方法はありますか?
配列を各方向に数ピクセルずつシフトし、最小 MSQ を計算してみました。ただし、これは十分に堅牢ではありません。ヘルプやアドバイスをいただければ幸いです。
import numpy as np
import dicom
#first image
ds = dicom.read_file("U:\\temp\\1.dcm")
array1 = ds.pixel_array
#second image
ds1 = dicom.read_file("U:\\temp\\5.dcm")
array2 = ds1.pixel_array
#shifting image by a number of pixels in any direction
arr1 = np.roll(array2, 100, axis=1)
imshow(arr1)
def mse(imageA, imageB):
# the 'Mean Squared Error' between the two images is the
# sum of the squared difference between the two images;
err = np.sum((imageA.astype("float") - imageB.astype("float")) ** 2)
err /= float(imageA.shape[0] * imageA.shape[1])
# return the MSE, the lower the error, the more "similar"
# the two images are
return err
first_try = mse(array1, array2)
second_try = mse(arr1, array2)