SciPy - Ndimage

โมดูลย่อย SciPy ndimage มีไว้สำหรับการประมวลผลภาพ ในที่นี้ ndimage หมายถึงภาพ n มิติ

งานที่พบบ่อยที่สุดในการประมวลผลภาพมีดังนี้ & miuns;

  • อินพุต / เอาท์พุตแสดงภาพ
  • การปรับแต่งพื้นฐาน - การครอบตัดการพลิกการหมุน ฯลฯ
  • การกรองภาพ - การลดเสียงการเพิ่มความคมชัด ฯลฯ
  • การแบ่งส่วนภาพ - พิกเซลการติดฉลากที่สอดคล้องกับวัตถุต่างๆ
  • Classification
  • การแยกคุณลักษณะ
  • Registration

ให้เราพูดถึงวิธีการบางอย่างที่สามารถทำได้โดยใช้ SciPy

การเปิดและการเขียนลงในไฟล์รูปภาพ

misc packageใน SciPy มาพร้อมกับภาพบางภาพ เราใช้ภาพเหล่านั้นเพื่อเรียนรู้การปรับแต่งภาพ ขอให้เราพิจารณาตัวอย่างต่อไปนี้.

from scipy import misc
f = misc.face()
misc.imsave('face.png', f) # uses the Image module (PIL)

import matplotlib.pyplot as plt
plt.imshow(f)
plt.show()

โปรแกรมข้างต้นจะสร้างผลลัพธ์ต่อไปนี้

รูปภาพใด ๆ ในรูปแบบดิบคือการรวมกันของสีที่แสดงด้วยตัวเลขในรูปแบบเมทริกซ์ เครื่องเข้าใจและจัดการกับภาพตามตัวเลขเหล่านั้นเท่านั้น RGB เป็นวิธีการแสดงที่ได้รับความนิยม

ให้เราดูข้อมูลทางสถิติของภาพด้านบน

from scipy import misc
face = misc.face(gray = False)
print face.mean(), face.max(), face.min()

โปรแกรมข้างต้นจะสร้างผลลัพธ์ต่อไปนี้

110.16274388631184, 255, 0

ตอนนี้เรารู้แล้วว่าภาพนั้นสร้างขึ้นจากตัวเลขดังนั้นการเปลี่ยนแปลงค่าของตัวเลขจะเปลี่ยนภาพต้นฉบับ ให้เราทำการแปลงรูปทรงเรขาคณิตบนภาพ การดำเนินการทางเรขาคณิตพื้นฐานคือการครอบตัด

from scipy import misc
face = misc.face(gray = True)
lx, ly = face.shape
# Cropping
crop_face = face[lx / 4: - lx / 4, ly / 4: - ly / 4]
import matplotlib.pyplot as plt
plt.imshow(crop_face)
plt.show()

โปรแกรมข้างต้นจะสร้างผลลัพธ์ต่อไปนี้

นอกจากนี้เรายังสามารถดำเนินการขั้นพื้นฐานบางอย่างเช่นการพลิกภาพกลับหัวตามที่อธิบายไว้ด้านล่าง

# up <-> down flip
from scipy import misc
face = misc.face()
flip_ud_face = np.flipud(face)

import matplotlib.pyplot as plt
plt.imshow(flip_ud_face)
plt.show()

โปรแกรมข้างต้นจะสร้างผลลัพธ์ต่อไปนี้

นอกจากนี้เรายังมีไฟล์ rotate() functionซึ่งจะหมุนภาพตามมุมที่กำหนด

# rotation
from scipy import misc,ndimage
face = misc.face()
rotate_face = ndimage.rotate(face, 45)

import matplotlib.pyplot as plt
plt.imshow(rotate_face)
plt.show()

โปรแกรมข้างต้นจะสร้างผลลัพธ์ต่อไปนี้

ฟิลเตอร์

ให้เราคุยกันว่าฟิลเตอร์ช่วยในการประมวลผลภาพอย่างไร

การกรองในการประมวลผลภาพคืออะไร?

การกรองเป็นเทคนิคในการปรับเปลี่ยนหรือปรับปรุงรูปภาพ ตัวอย่างเช่นคุณสามารถกรองรูปภาพเพื่อเน้นคุณสมบัติบางอย่างหรือลบคุณสมบัติอื่น ๆ การประมวลผลภาพที่ใช้กับการกรอง ได้แก่ Smoothing, Sharpening และ Edge Enhancement

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

เบลอ

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

from scipy import misc
face = misc.face()
blurred_face = ndimage.gaussian_filter(face, sigma=3)
import matplotlib.pyplot as plt
plt.imshow(blurred_face)
plt.show()

โปรแกรมข้างต้นจะสร้างผลลัพธ์ต่อไปนี้

ค่าซิกม่าบ่งบอกระดับความเบลอในระดับห้า เราสามารถเห็นการเปลี่ยนแปลงคุณภาพของภาพได้โดยการปรับค่าซิกม่า สำหรับรายละเอียดเพิ่มเติมของการเบลอให้คลิกที่→สอน DIP (Digital Image Processing)

การตรวจจับขอบ

ให้เราคุยกันว่าการตรวจจับขอบช่วยในการประมวลผลภาพอย่างไร

Edge Detection คืออะไร?

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

อัลกอริทึมการตรวจจับขอบที่ใช้บ่อยที่สุด ได้แก่

  • Sobel
  • Canny
  • Prewitt
  • Roberts
  • วิธีฟัซซี่ลอจิก

ขอให้เราพิจารณาตัวอย่างต่อไปนี้.

import scipy.ndimage as nd
import numpy as np

im = np.zeros((256, 256))
im[64:-64, 64:-64] = 1
im[90:-90,90:-90] = 2
im = ndimage.gaussian_filter(im, 8)

import matplotlib.pyplot as plt
plt.imshow(im)
plt.show()

โปรแกรมข้างต้นจะสร้างผลลัพธ์ต่อไปนี้

ภาพมีลักษณะเป็นบล็อกสีเหลี่ยม ตอนนี้เราจะตรวจจับขอบของบล็อกสีเหล่านั้น ที่นี่ ndimage มีฟังก์ชันที่เรียกว่าSobelเพื่อดำเนินการนี้ ในขณะที่ NumPy ให้ไฟล์Hypot ฟังก์ชันเพื่อรวมเมทริกซ์ผลลัพธ์ทั้งสองเข้าด้วยกัน

ขอให้เราพิจารณาตัวอย่างต่อไปนี้.

import scipy.ndimage as nd
import matplotlib.pyplot as plt

im = np.zeros((256, 256))
im[64:-64, 64:-64] = 1
im[90:-90,90:-90] = 2
im = ndimage.gaussian_filter(im, 8)

sx = ndimage.sobel(im, axis = 0, mode = 'constant')
sy = ndimage.sobel(im, axis = 1, mode = 'constant')
sob = np.hypot(sx, sy)

plt.imshow(sob)
plt.show()

โปรแกรมข้างต้นจะสร้างผลลัพธ์ต่อไปนี้