Image Pyramids

จาก Morange Wiki

วัตถุประสงค์

  • เราจะได้เรียนรู้เกี่ยวกับ Pyramids
  • เราจะเห็นฟังก์ชั่นเหล่านี้ cv2.pyrUp () cv2.pyrDown ()


ปกติเราใช้ในการทำงานที่มีภาพของขนาดคงที่ แต่ในบางโอกาสเราต้องทำงานกับภาพความละเอียดที่แตกต่างกันของภาพเดียวกัน ยกตัวอย่างเช่นขณะที่การค้นหาบางสิ่งบางอย่างในภาพเช่นใบหน้าเราไม่แน่ใจว่าสิ่งที่ขนาดวัตถุที่จะนำเสนอในภาพ ในกรณีที่เราจะต้องสร้างชุดของภาพที่มีความละเอียดที่แตกต่างกันและค้นหาวัตถุในภาพทั้งหมด ชุดนี้ของภาพที่มีความละเอียดที่แตกต่างกันจะเรียกว่าภาพ Pyramids (เพราะเมื่อพวกเขาจะถูกเก็บไว้ใน stack ที่มีภาพที่ยิ่งใหญ่ที่สุดที่ด้านล่างและภาพที่มีขนาดเล็กที่สุดที่ดูด้านบนเหมือนปิรามิด)

เราสามารถหา Pyramids โดยใช้ฟังก์ชั่น cv2.pyrDown () และ cv2.pyrUp ()

 img = cv2.imread('messi5.jpg')
 lower_reso = cv2.pyrDown(higher_reso)
มีข้อผิดพลาดในการสร้างรูปย่อ: ไฟล์สูญหาย

higher_reso2 = cv2.pyrUp(lower_reso)

โปรดจำไว้ว่า higher_reso2 ไม่เท่ากับ higher_reso เพราะเมื่อคุณลดความละเอียดคุณหลวมข้อมูล ภาพด้านล่างเป็น 3 ระดับลงพีระมิดที่สร้างขึ้นจากภาพที่มีขนาดเล็กที่สุดในกรณีที่ก่อนหน้านี้ เปรียบเทียบกับภาพต้นฉบับ

มีข้อผิดพลาดในการสร้างรูปย่อ: ไฟล์สูญหาย

Pyramids Laplacian จะเกิดขึ้นจากGaussian Pyramids ไม่มีฟังก์ชั่นพิเศษสำหรับ Pyramids Laplacian เป็นเหมือน edge images เท่านั้น ส่วนใหญ่ขององค์ประกอบที่เป็น 0 พวกเขาจะใช้ในการบีบอัดภาพ ระดับใน Laplacian Pyramids จะเกิดขึ้นโดยความแตกต่างระหว่างระดับว่าใน Gaussian Pyramids และรุ่นของและขนาดของบนสุด ของการขยายตัวในเกาส์ Pyramids สามระดับในระดับ Laplacian จะมีลักษณะเช่นด้านล่าง (ความคมชัดจะมีการปรับเพื่อเพิ่มเนื้อหา)

Lap.jpg

Image Blending using Pyramids
หนึ่งโปรแกรมของ Pyramids เป็นภาพผสม ยกตัวอย่างเช่นในการรวมถาพ แต่มันอาจจะดูไม่ดีเนื่องจากการความเนียนระหว่างภาพ ในกรณีที่การผสมภาพที่มี Pyramids จะช่วยให้คุณอย่างกลมกลืนโดยไม่ต้องออกข้อมูลมากในภาพ หนึ่งในตัวอย่างคลาสสิกของที่นี่คือการผสมผสานของทั้งสองผลไม้ส้มและแอปเปิ้ล เห็นผลในขณะนี้ตัวเองจะเข้าใจสิ่งที่ฉันพูด

มีข้อผิดพลาดในการสร้างรูปย่อ: ไฟล์สูญหาย


 import cv2
 import numpy as np,sys
 
 A = cv2.imread('apple.jpg')
 B = cv2.imread('orange.jpg')
 
 # สร้าง Gaussian pyramid ของ A
 G = A.copy()
 gpA = [G]
 for i in xrange(6):
     G = cv2.pyrDown(G)
     gpA.append(G)
 
 # สร้าง Gaussian pyramid ของ B
 G = B.copy()
 gpB = [G]
 for i in xrange(6):
     G = cv2.pyrDown(G)
     gpB.append(G)
 
 # สร้าง Laplacian Pyramid ของ A
 lpA = [gpA[5]]
 for i in xrange(5,0,-1):
     GE = cv2.pyrUp(gpA[i])
     L = cv2.subtract(gpA[i-1],GE)
     lpA.append(L)
 
 # สร้าง Laplacian Pyramid ของ B
 lpB = [gpB[5]]
 for i in xrange(5,0,-1):
     GE = cv2.pyrUp(gpB[i])
     L = cv2.subtract(gpB[i-1],GE)
     lpB.append(L)
 
 # เพิ่มครึ่งซ้ายและขวาของภาพในแต่ละระดับ
 LS = []
 for la,lb in zip(lpA,lpB):
     rows,cols,dpt = la.shape
     ls = np.hstack((la[:,0:cols/2], lb[:,cols/2:]))
     LS.append(ls)
 
 # now reconstruct
 ls_ = LS[0]
 for i in xrange(1,6):
     ls_ = cv2.pyrUp(ls_)
     ls_ = cv2.add(ls_, LS[i])
 
 # เชื่อมต่อโดยตรงแต่ละครึ่ง
 real = np.hstack((A[:,:cols/2],B[:,cols/2:]))
 
 cv2.imwrite('Pyramid_blending2.jpg',ls_)
 cv2.imwrite('Direct_blending.jpg',real)