انتقل إلى المحتوى الرئيسي

الوحدة 8 — تكبير الصورة وتصحيح الوجوه

الكرسيّ الجميل بأسلوب علامتنا خرج من الوحدة 7 بدقّة 1024×1024. الآن تطلب المطبعة صورة 300 dpi على A3، أي حوالي 3500×5000 بكسل. تكبير الصورة بمحرّر عاديّ (bicubic) يُنتج صورة ضبابيّة غير صالحة للطباعة. الحلّ يكمن في تكبير ذكيّ، وقد تظهر عليه أحيانًا حاجة إضافيّة: تصحيح الوجوه إن كانت الصورة تحتوي أشخاصًا.

طريقتان للتكبير

هناك مقاربتان جوهريًّا مختلفتان لتكبير صورة مُنتَجة بالانتشار:

1) شبكات مخصّصة للتكبير الأعلى دقّة (ESRGAN, Real-ESRGAN, SwinIR). شبكات عصبيّة مُدرَّبة خصّيصًا على مهمّة SR (Super-Resolution). تعمل بسرعة (0.5-2 ثانية للصورة على GPU متوسّط)، لا تحتاج تعليمة، لا تُغيّر المحتوى. مناسبة للتكبير المُنتِج (batch): مئات الصور بلمسة واحدة.

2) تكبير بالانتشار (SD Upscaler, SDXL Refiner على دقّة أعلى). نستعمل نفس نموذج الانتشار على دقّة مستهدفة أكبر مع صورة إلى صورة بـstrength منخفض. يُنتج تفاصيل جديدة (يخترع نسيج الخشب، ملمس النسيج)، بكلفة زمن أعلى بكثير (30-90 ثانية) وحاجة إلى تعليمة تصف الصورة.

متى نستعمل كلًّا

  • صورة نظيفة تحتاج فقط تكبير بلا تفاصيل جديدة: Real-ESRGAN. سريع ومحفوظ.
  • صورة تحتاج تفاصيل حادّة (نسيج، ملمس، حبيبات): SD Upscaler بـstrength=0.2-0.35.
  • صورة كبيرة جدًّا (×4 وأكثر): مرحلتان. Real-ESRGAN أوّلًا للتكبير الخام، ثمّ SD Upscaler بـstrength=0.15 لإعادة الحبيبات الطبيعيّة.

Real-ESRGAN عمليًّا

الأسرع والأنظف. يستعمل نموذج RealESRGAN_x4plus عادةً (تكبير ×4):

import cv2
import numpy as np
from realesrgan import RealESRGANer
from basicsr.archs.rrdbnet_arch import RRDBNet

model = RRDBNet(num_in_ch=3, num_out_ch=3, num_feat=64, num_block=23, num_grow_ch=32, scale=4)
upscaler = RealESRGANer(
scale=4,
model_path="weights/RealESRGAN_x4plus.pth",
model=model,
half=True,
device="cuda",
)

img = cv2.imread("chaise_1024.png", cv2.IMREAD_UNCHANGED)
output, _ = upscaler.enhance(img, outscale=4)
cv2.imwrite("chaise_4096.png", output)

الوقت: ثانيتان تقريبًا لكرسيّ 1024→4096. النتيجة: صورة أكبر بأربع مرّات، حادّة الحوافّ، دون تفاصيل مخترعة. مناسبة كلّيًّا لكتالوج الأثاث.

SD Upscaler لتفاصيل حقيقيّة

SDXL يقبل توليد على دقّات أعلى (1536×1536 مثلًا) مع صورة إلى صورة وstrength=0.2-0.3. النتيجة: تفاصيل نسيج تظهر لم تكن في الصورة الأصليّة (حبيبات الخشب، ملمس القماش).

from diffusers import StableDiffusionXLImg2ImgPipeline
from PIL import Image

pipe = StableDiffusionXLImg2ImgPipeline.from_pretrained(
"stabilityai/stable-diffusion-xl-refiner-1.0",
torch_dtype=torch.float16, variant="fp16",
).to("cuda")

image_1024 = Image.open("chaise_1024.png")
image_1536 = image_1024.resize((1536, 1536), Image.LANCZOS)

image_hd = pipe(
prompt="wooden Scandinavian chair, detailed walnut grain, fabric texture, product photography",
image=image_1536,
strength=0.25,
num_inference_steps=25,
).images[0]

فخّ: strength عالٍ (>0.4) يعيد توليد الصورة عمليًّا ويُغيّر تفاصيل حاسمة (شكل القوائم، لون الغطاء). التزم بـ0.2-0.3 لتكبير حقيقيّ لا لإعادة توليد مقنّعة.

الآثار الجانبيّة الشائعة

  • حبيبات مفرطة: SD Upscaler بـstrength مرتفع يُدخل حبيبات صناعيّة تشبه فيلمًا قديمًا.
  • حوافّ حادّة جدًّا: Real-ESRGAN يُضخّم أحيانًا ضوضاء الحوافّ فتصبح مقطعة. حلّ: denoise_strength منخفض على النموذج.
  • الملمس الصناعيّ (الشعور «البلاستيك المصقول»): الملمس الطبيعيّ (خشب، صوف، جلد) يُقلَّد بشكل سيّئ في التكبير الكثير. للطباعة الاحترافيّة، صورة مصدر بدقّة أعلى دائمًا أفضل من تكبير عملاق.

تصحيح الوجوه

كلّ من عمل بـSD 1.5 لصور تحتوي وجوهًا يعرف المشكلة: الوجه الصغير في الصورة يخرج مشوّهًا (عيون بلا تناسق، شفاه مكسورة، تشوّه هندسيّ). السبب: U-Net يشتغل على latent 64×64 (لـSD 1.5) أو 128×128 (لـSDXL)، ووجه صغير في الصورة يقع في مساحة قليلة من هذا Latent.

الحلّ: نماذج مخصّصة لتصحيح الوجوه تعمل كخطوة ما بعد. أشهرها:

  • GFPGAN: خفيف، سريع، طبيعيّ الأداء، قد يُنعّم الوجه أكثر ممّا يجب.
  • CodeFormer: أدقّ من GFPGAN مع معلمة توازن (fidelity) بين الحفاظ على الوجه الأصليّ (0.5) وتحسين الجودة (0.7-1.0). أحدث وأكثر استعمالًا.
  • RestoreFormer: بديل مفتوح المصدر، أداء متقارب.

SDXL يعمل على وجوه أكبر بشكل ملحوظ، وتصحيح الوجوه أقلّ ضرورة عليه، لكن يبقى مفيدًا لصور تحتوي أشخاصًا صغارًا في الخلفيّة.

تحذير أخلاقيّ: تصحيح الوجوه يُغيّر ملامح الشخص. لا يُطبَّق أبدًا على صور أشخاص حقيقيّين موثّقين. مناسب فقط للأشخاص المولَّدين بالانتشار.

تحضير الصورة للطباعة

كتالوج الأثاث سيُطبَع. التحضير النهائيّ يمرّ بأربع خطوات:

  1. تكبير بـReal-ESRGAN ×4 (1024→4096).
  2. تفاصيل حادّة اختياريّة بـSD Upscaler على مناطق مهمّة.
  3. تحويل ملفّ إلى TIFF بلا ضغط (طباعة احترافيّة) أو JPEG جودة 95% (ويب).
  4. ضبط الملمس اللونيّ إلى CMYK إن كانت الطباعة تُعتمد على CMYK. Adobe RGB→CMYK يفقد ألوانًا مُشبَعة (فيروزيّ خصوصًا)، يُنصَح بمعاينة قبل الطلب النهائيّ.

الخيط الأحمر: كتالوج A3 كامل

بعد هذه الوحدة، صور الكتالوج جاهزة:

  • 12 صورة كرسيّ بأساليب مختلفة (LoRA علامة، ControlNet Canny).
  • كلّها 1024×1024 مُنتَجة بـSDXL.
  • تُكبَّر كلّها ×4 بـReal-ESRGAN إلى 4096×4096.
  • تُصدَّر TIFF CMYK للمطبعة.

الوقت الإجماليّ: أقلّ من ساعة على GPU متوسّط، للكتالوج الكامل. المكافئ اليدويّ في استوديو تصوير: أسبوع من التحضير + جلسة تصوير + جلسة معالجة صور.

قاعدة قرار

اسأل نفسك قبل التكبير: «هل أحتاج تفاصيل أكثر أم فقط بكسلات أكثر؟». الأولى تحتاج انتشارًا (بطيء، مكلف، جميل). الثانية تحتاج شبكة مخصّصة (سريع، رخيص، كافٍ). الخلط بينهما يُهدر ساعات.

الخلاصة

  • Real-ESRGAN للتكبير السريع بلا تفاصيل مخترعة؛ SD Upscaler لتفاصيل حقيقيّة بكلفة زمن أعلى.
  • strength=0.2-0.3 في التكبير بالانتشار؛ فوق ذلك تُعاد الصورة توليدًا وتتغيّر تفاصيل حاسمة.
  • تصحيح الوجوه (GFPGAN, CodeFormer) للوجوه الصغيرة في SD 1.5 أساسًا؛ لا يُطبَّق على أشخاص حقيقيّين.
  • تحضير الطباعة يمرّ بـTIFF/CMYK، ومعاينة الفقد اللونيّ قبل الطلب النهائيّ.