ผลต่างระหว่างรุ่นของ "Image Pyramids"
Nobpadon (คุย | มีส่วนร่วม) |
Nobpadon (คุย | มีส่วนร่วม) |
||
แถว 25: | แถว 25: | ||
หนึ่งโปรแกรมของ Pyramids เป็นภาพผสม ยกตัวอย่างเช่นในการรวมถาพ แต่มันอาจจะดูไม่ดีเนื่องจากการความเนียนระหว่างภาพ ในกรณีที่การผสมภาพที่มี Pyramids จะช่วยให้คุณอย่างกลมกลืนโดยไม่ต้องออกข้อมูลมากในภาพ หนึ่งในตัวอย่างคลาสสิกของที่นี่คือการผสมผสานของทั้งสองผลไม้ส้มและแอปเปิ้ล เห็นผลในขณะนี้ตัวเองจะเข้าใจสิ่งที่ฉันพูด | หนึ่งโปรแกรมของ Pyramids เป็นภาพผสม ยกตัวอย่างเช่นในการรวมถาพ แต่มันอาจจะดูไม่ดีเนื่องจากการความเนียนระหว่างภาพ ในกรณีที่การผสมภาพที่มี Pyramids จะช่วยให้คุณอย่างกลมกลืนโดยไม่ต้องออกข้อมูลมากในภาพ หนึ่งในตัวอย่างคลาสสิกของที่นี่คือการผสมผสานของทั้งสองผลไม้ส้มและแอปเปิ้ล เห็นผลในขณะนี้ตัวเองจะเข้าใจสิ่งที่ฉันพูด | ||
<div align="center">[[ไฟล์:Orapple.jpg|420px|thumb|none|]]</div> | <div align="center">[[ไฟล์:Orapple.jpg|420px|thumb|none|]]</div> | ||
+ | <br> | ||
<pre> | <pre> | ||
import cv2 | import cv2 |
รุ่นแก้ไขปัจจุบันเมื่อ 09:11, 5 สิงหาคม 2559
วัตถุประสงค์
- เราจะได้เรียนรู้เกี่ยวกับ 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)