Image Pyramids
วัตถุประสงค์
- เราจะได้เรียนรู้เกี่ยวกับ 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 จะมีลักษณะเช่นด้านล่าง (ความคมชัดจะมีการปรับเพื่อเพิ่มเนื้อหา)
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)