لطفا کد زیر را بر روی دو تصویر داده شده اعمال کنید به صورتی که نتیجه رنگی باشد:                                                                                                                                                                                                                         '/content/prokudin-Gorskii2/data_2/01047u.tif',
    '/content/prokudin-Gorskii2/data_2/01861a.tif'                                                                                                                                                                                                                                                                                                                                 کد به صورت زیر است:                                                                                                                                                                                                                                                                                                                                                                                        import os
import cv2
import numpy as np
import matplotlib.pyplot as plt

# مسیر تصویر اصلی
image_path = '/content/prokudin-Gorskii/hw1/test.jpg'

# بررسی وجود فایل تصویر
if not os.path.exists(image_path):
    print(f"فایل {image_path} وجود ندارد. لطفاً مسیر را بررسی کنید.")
    exit()

# بارگذاری تصویر اصلی
image = cv2.imread(image_path)

# جدا کردن کانال‌های رنگی
B, G, R = cv2.split(image)

# تابع برای پیدا کردن شیفت بین دو تصویر با استفاده از phase correlation
def find_shift_with_phase_correlation(img_ref, img_to_align):
    # پیدا کردن شیفت بین تصاویر با استفاده از همبستگی فازی
    shift = cv2.phaseCorrelate(np.float32(img_ref), np.float32(img_to_align))[0]
    return int(shift[0]), int(shift[1])

# تابع برای ساخت هرم تصویر و جستجوی شیفت در سطوح مختلف
def find_shift_pyramid(img_ref, img_to_align, levels=3):
    shift = (0, 0)

    for level in range(levels, 0, -1):
        # کاهش وضوح با کاهش اندازه تصاویر
        ref_small = cv2.pyrDown(img_ref)
        align_small = cv2.pyrDown(img_to_align)

        # پیدا کردن شیفت در سطح کاهش یافته
        shift_level = find_shift_with_phase_correlation(ref_small, align_small)

        # به‌روزرسانی شیفت
        shift = (shift[0] + shift_level[0] * 2, shift[1] + shift_level[1] * 2)

        # به‌روزرسانی تصاویر برای سطح بالاتر
        img_ref = ref_small
        img_to_align = align_small

    return shift

# انتخاب لایه قرمز به عنوان مرجع
ref = R

# پیدا کردن شیفت‌های لایه‌های سبز و آبی نسبت به مرجع
shift_G_found = find_shift_pyramid(ref, G)
shift_B_found = find_shift_pyramid(ref, B)

print(f"شیفت لایه سبز: {shift_G_found}")
print(f"شیفت لایه آبی: {shift_B_found}")

# اعمال شیفت‌های معکوس برای هم‌ترازی
def apply_shift(image, shift):
    M = np.float32([[1, 0, -shift[0]], [0, 1, -shift[1]]])
    shifted = cv2.warpAffine(image, M, (image.shape[1], image.shape[0]))
    return shifted

aligned_G = apply_shift(G, shift_G_found)
aligned_B = apply_shift(B, shift_B_found)

# ادغام لایه‌های تراز شده به یک تصویر رنگی
aligned_image = cv2.merge([
    aligned_B.astype(np.uint8),
    aligned_G.astype(np.uint8),
    ref.astype(np.uint8)
])

# نمایش تصویر تراز شده با Matplotlib
plt.figure(figsize=(10,10))
plt.title('Aligned Image')
# تبدیل از BGR به RGB برای نمایش صحیح
aligned_image_rgb = cv2.cvtColor(aligned_image, cv2.COLOR_BGR2RGB)
plt.imshow(aligned_image_rgb)
plt.axis('off')
plt.show()

# ذخیره تصویر تراز شده
cv2.imwrite('aligned_test.jpg', aligned_image)
print("تصویر تراز شده با موفقیت ذخیره شد: 'aligned_test.jpg'")