รับความแตกต่างระหว่างสองภาพเป็นภาพโปร่งใสใน GIMP


21

ฉันมีสองภาพAและBมีความคล้ายคลึงกันในหลายภูมิภาค

ฉันต้องการสร้างภาพCเพื่อที่

B = C on top of A

ที่Cควรจะเป็นโปร่งใสเป็นไปได้ on top ofเป็นชั้นซ้อนทับปกติ

ดังนั้นCเป็นชนิดของความแตกต่างระหว่างบางและA BหากAและBเหมือนกันก็Cจะโปร่งใสโดยสิ้นเชิง ถ้าAและBจะแตกต่างกันมากแล้วของพวกเขาเกือบจะเหมือนกันกับCB


มีคำตอบที่ดีสำหรับคำถามนี้เกี่ยวกับ Stack Overflow ที่ใช้ ImageMagick: stackoverflow.com/questions/5132749/…
AB

คำตอบ:


23

คุณสามารถใช้โหมดเลเยอร์ "ความแตกต่าง" เพื่อสร้างเลเยอร์มาสก์และนำไปใช้กับ B ดังนี้:

  1. เปิดรูปภาพทั้งสองเป็นเลเยอร์ A ที่ด้านล่าง B ที่ด้านบน
  2. ในกล่องโต้ตอบของเลเยอร์ให้ทำเครื่องหมายโหมดเลเยอร์ของ B เป็น "ความแตกต่าง" ตอนนี้คุณควรเห็นภาพส่วนใหญ่เป็นสีดำภาพเหมือนกันกับพื้นที่สีที่ทำเครื่องหมายพื้นที่ที่แตกต่างกัน อย่างไรก็ตามสีเหล่านี้จะไม่ตรงกับสีของ B ตามที่คุณต้องการ
  3. แก้ไข -> คัดลอกที่มองเห็นเพื่อรับสำเนาของผลกระทบที่คำนวณได้ใน B
  4. ทำเลเยอร์ B ซ้ำเปลี่ยนโหมดเป็น "ปกติ" (เรียกว่าเลเยอร์นี้ C)
  5. บนเมนูเลเยอร์เพิ่มเลเยอร์มาสก์ไปที่ C (เลเยอร์ -> มาสก์ -> เพิ่มเลเยอร์มาสก์)
  6. เมื่อเลือกมาส์กแล้วให้วางเนื้อหาที่คัดลอกในขั้นตอนที่ 3 (แก้ไข -> วาง)
  7. ยึดเนื้อหาที่วางบนหน้ากากของเลเยอร์ (layer-> Layer layer)

มีคุณอยู่ - ทำให้เลเยอร์ A และ B มองไม่เห็นและคุณควรจะใกล้เคียงกับสิ่งที่คุณต้องการ การดำเนินการเพิ่มเติมเกี่ยวกับเลเยอร์มาสก์ (ฉันแนะนำให้ใช้สี -> ส่วนโค้ง) สามารถปรับความทึบ / ความโปร่งแสงของพื้นที่บนเลเยอร์ C

อัปเดตฉันเพิ่งตอบคำถามที่คล้ายกันนี้ใน Stackoverflowซึ่ง OP ต้องการทำงานโดยใช้โปรแกรม (ใช้ Python + Python-imaging-library) - ฉันโพสต์โปรแกรมเต็มในคำถามนั้นและอาจเป็นประโยชน์สำหรับทุกคน สนใจคำตอบนี้


On the layer's dialog, mark B's layer mode as "difference". ขอโทษอะไร? ฉันมองไปที่หน้าต่างเครื่องมือเลเยอร์และถ้าผมคลิกขวาที่ชั้น B, layer modeฉันไม่เห็นอะไรที่ดูเหมือนว่า ที่ใกล้ที่สุดที่ฉันพบคือAdd Layer Maskแต่ฉันไม่คิดว่านั่นคือสิ่งที่คุณกำลังอ้างถึง ใช้ v2.8.22
เอเดรียน

เมื่อเลือกเลเยอร์ไว้คุณสามารถเลือกโหมดเลเยอร์บนเมนูแบบเลื่อนลงที่ด้านบนของกล่องโต้ตอบเลเยอร์ไม่ใช่จากเมนูคลิกขวา
jsbueno

ฉันมีความสับสนเล็กน้อยหรือมีปัญหากับขั้นตอนที่ 6 - ดูเหมือนว่าจะวางเนื้อหาลงในเลเยอร์ใหม่แม้ว่าจะเลือก "หน้ากาก C" ก็ตามทำให้ชั้นที่สี่ชื่อว่า "Floating Selection (Pasted Layer)" ซึ่งถูกชดเชย จากตำแหน่งเดิม - เป็นอย่างที่ควรจะเป็นอย่างไร
รหัส Jockey

มันคือ "การเลือกแบบลอยตัว" จนกว่าคุณจะ "ยึด" ไปยังปลายทาง (Ctrl-H) ตรวจสอบให้แน่ใจว่ามีการใช้งานหน้ากากเมื่อคุณวาง (Ctrl-V) มิฉะนั้นการยึดอาจไปที่อื่น
xenoid

5

มีวิธีง่าย ๆ ที่จะทำ:

เปิดภาพเป็นสองเลเยอร์เรียกใช้ตัวกรอง - อนิเมชั่น - ปรับ (ความแตกต่าง) คุณควรได้ภาพที่เหมือนกันซึ่งตอนนี้ทำจากเลเยอร์ด้านล่างและเลเยอร์ diff ที่ด้านบนของมัน

สิ่งต่าง ๆ มีความซับซ้อนหากคุณมีความโปร่งใสเพียงบางส่วนเนื่องจากตัวกรองจะลบออก
นี่คือวิธีแก้ปัญหาที่ฉันพบสำหรับกรณีนี้:

  • ลบ Alpha Channel บนเลเยอร์ทั้งสอง (การดำเนินการอยู่ในเมนูบริบท)

ภาพจะได้รับพื้นหลังสีขาว แต่ไม่ต้องกังวลเราจะยกเลิกในภายหลัง

  • ตัวกรอง - ภาพเคลื่อนไหว - ปรับให้เหมาะสม (ความแตกต่าง)

ตอนนี้เรามีความแตกต่างของเลเยอร์ที่มีพื้นหลังสีขาวในสถานที่ของความโปร่งใสบางส่วน แต่เราต้องการให้พิกเซลเหล่านั้นมีความโปร่งใสดังนั้นเราจะนำรูปของส่วนต่างและคัดลอกรูปภาพของรูปร่างนี้จากชั้นบนสุดดั้งเดิม ตรวจสอบให้แน่ใจว่าได้เลือกเลเยอร์ diff ที่เพิ่งสร้างใหม่และดำเนินการต่อ:

  • Layer - Layer เพื่อขนาดรูปภาพ
  • แก้ไข - คัดลอก (Ctrl + C)
  • กลับไปที่ภาพดั้งเดิม
  • เลิกทำเลิกทำเพื่อคืนความโปร่งใสสู่เลเยอร์ของเรา
  • แก้ไข - วางเป็น - เลเยอร์ใหม่
  • Alpha to Selection (ในเมนูบริบท) บนเลเยอร์ diff ที่วาง
  • ลบเลเยอร์ diff ที่วาง
  • ตรวจสอบให้แน่ใจว่าได้เลือกเลเยอร์ด้านบนและคัดลอก (Ctrl + C)
  • ตอนนี้คุณมีความแตกต่างเพียงแค่วาง (Ctrl + V) และสร้างเลเยอร์ใหม่จากมัน

แน่นอนว่าไม่มีเวทมนตร์เกิดขึ้นและเลเยอร์ที่โปร่งใสบางส่วนจะไม่เปลี่ยนสีหรือลดความโปร่งใสของเลเยอร์ด้านล่างดังนั้นจึงเป็นเพียงการขยายกรณีที่พิกเซลที่เปลี่ยนแปลงของเลเยอร์ด้านบนครอบคลุมเลเยอร์ด้านล่าง


วิธีการของ PS jsbueno ไม่ได้ผลสำหรับฉัน


1

GIMP มีโหมดแปรงชื่อ "การลบสี" การใช้แปรงนี้ที่มีสี X เพื่อกำหนดพิกเซล P1 ที่แน่นอนสร้างพิกเซล P2 ด้วยช่องอัลฟ่าที่ลดลงวิธีที่ผสมผสาน P2 กับพิกเซลที่มีสี X ในโหมดปกติให้ผลลัพธ์พิกเซล P1 ผลเช่นเดียวกันนำไปใช้กับพื้นที่ที่เลือกหรือภาพทั้งหมดสามารถทำได้โดยใช้"สีอัลฟา" การกระทำ

สามารถใช้โหมดแปรงกับ "เครื่องมือโคลน" ในกรณีนี้เป็นไปได้ที่จะใช้สีจากพิกเซลของภาพพื้นหลัง A และนำไปใช้กับพิกเซลของรูปภาพผลลัพธ์ B ภาพที่เหลือเป็นภาพที่ต้องการ C

ในรายละเอียดการสร้างภาพ C มีดังต่อไปนี้:

  1. วางภาพ A และ B เป็นเลเยอร์ (A ด้านล่าง B)
  2. ทำซ้ำภาพ B และเรียกว่า C. วางไว้ระหว่าง A และ B ซ่อนภาพ B
  3. เลือก "เครื่องมือโคลน" ใน "บานหน้าต่างเครื่องมือตัวเลือก" ตั้งค่าตัวเลือกต่อไปนี้: โหมด: "ลบสี"; แปรง: ใช้แปรงกลมแหลม ("ความแข็ง 100") ขนาด: ทำให้แปรงมีขนาดใหญ่ขึ้นเพื่อระบายสีภาพทั้งหมดได้อย่างง่ายดายในครั้งเดียว
  4. เลือกเลเยอร์และ CTRL + ที่พิกเซลด้านซ้ายบนเพื่อเลือกสถานที่ที่จะโคลนและจดจำตำแหน่งของมัน (สำหรับการซูม 100% จะเป็น (1,1) สำหรับ 50% จะเป็น (2,2) เป็นต้น)
  5. ตอนนี้เลือกเลเยอร์ C และเริ่มทาสีจากด้านบนซ้ายและครอบคลุมภาพทั้งหมดโดยไม่ยกแปรงขึ้น อาจดูเหมือนว่าภาพจะไม่เปลี่ยนแปลง แต่ถ้าคุณซ่อนเลเยอร์ A คุณจะเห็นเลเยอร์ C ตอนนี้มีรูปภาพที่ต้องการ
  6. ตรวจสอบผลลัพธ์: แสดงเลเยอร์ A และเลเยอร์ C สลับการมองเห็นเลเยอร์ B เพื่อให้แน่ใจว่าภาพมีลักษณะเหมือนกัน (คุณสามารถเลือกโหมด "ความแตกต่าง" สำหรับเลเยอร์ B ในกรณีเช่นนี้คุณควรได้รับภาพสีดำอย่างแน่นอน)

หมายเหตุ: วิธีนี้ใช้งานได้ตามที่อธิบายไว้ถ้าภาพพื้นหลังทึบ ในส่วนที่โปร่งใสของภาพพื้นหลังการผสม C ที่ด้านบนของ A จะดูแตกต่างจากภาพ B

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.