ผลต่างระหว่างรุ่นของ "Image Pyramids"

จาก Morange Wiki
(ยังไม่เสร็จ)
 
แถว 7: แถว 7:
 
<br>
 
<br>
 
เราสามารถหา Pyramids โดยใช้ฟังก์ชั่น cv2.pyrDown () และ cv2.pyrUp ()
 
เราสามารถหา Pyramids โดยใช้ฟังก์ชั่น cv2.pyrDown () และ cv2.pyrUp ()
 +
<pre>
 +
img = cv2.imread('messi5.jpg')
 +
lower_reso = cv2.pyrDown(higher_reso)
 +
</pre>
 +
<div align="center">[[ไฟล์:Messipyr.jpg|420px|thumb|none|]]</div>
 +
----
 +
<pre>
 +
higher_reso2 = cv2.pyrUp(lower_reso)
 +
</pre>
 +
โปรดจำไว้ว่า higher_reso2 ไม่เท่ากับ higher_reso เพราะเมื่อคุณลดความละเอียดคุณหลวมข้อมูล ภาพด้านล่างเป็น 3 ระดับลงพีระมิดที่สร้างขึ้นจากภาพที่มีขนาดเล็กที่สุดในกรณีที่ก่อนหน้านี้ เปรียบเทียบกับภาพต้นฉบับ
 +
<div align="center">[[ไฟล์:Messiup.jpg|420px|thumb|none|]]</div>
 +
----
 +
Pyramids Laplacian จะเกิดขึ้นจากGaussian Pyramids ไม่มีฟังก์ชั่นพิเศษสำหรับ Pyramids Laplacian เป็นเหมือน edge images เท่านั้น ส่วนใหญ่ขององค์ประกอบที่เป็น 0 พวกเขาจะใช้ในการบีบอัดภาพ ระดับใน Laplacian Pyramids จะเกิดขึ้นโดยความแตกต่างระหว่างระดับว่าใน Gaussian Pyramids และรุ่นของและขนาดของบนสุด ของการขยายตัวในเกาส์ Pyramids สามระดับในระดับ Laplacian จะมีลักษณะเช่นด้านล่าง (ความคมชัดจะมีการปรับเพื่อเพิ่มเนื้อหา)
 +
<div align="center">[[ไฟล์:Lap.jpg|420px|thumb|none|]]</div>
 +
'''Image Blending using Pyramids '''
 +
<br>
 +
หนึ่งโปรแกรมของ Pyramids เป็นภาพผสม ยกตัวอย่างเช่นในการรวมถาพ แต่มันอาจจะดูไม่ดีเนื่องจากการความเนียนระหว่างภาพ ในกรณีที่การผสมภาพที่มี Pyramids จะช่วยให้คุณอย่างกลมกลืนโดยไม่ต้องออกข้อมูลมากในภาพ หนึ่งในตัวอย่างคลาสสิกของที่นี่คือการผสมผสานของทั้งสองผลไม้ส้มและแอปเปิ้ล เห็นผลในขณะนี้ตัวเองจะเข้าใจสิ่งที่ฉันพูด
 +
<div align="center">[[ไฟล์:Orapple.jpg|420px|thumb|none|]]</div>
 +
<pre>
 +
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)
 +
</pre>
 +
----

รุ่นแก้ไขเมื่อ 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 จะมีลักษณะเช่นด้านล่าง (ความคมชัดจะมีการปรับเพื่อเพิ่มเนื้อหา)

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)