SciPy - Ndimage
Mô-đun con SciPy ndimage dành riêng cho xử lý hình ảnh. Ở đây, ndimage có nghĩa là một hình ảnh n chiều.
Một số tác vụ phổ biến nhất trong xử lý ảnh như sau & miuns;
- Đầu vào / Đầu ra, hiển thị hình ảnh
- Các thao tác cơ bản - Cắt, lật, xoay, v.v.
- Lọc hình ảnh - Khử nhiễu, làm sắc nét, v.v.
- Phân đoạn hình ảnh - Gắn nhãn pixel tương ứng với các đối tượng khác nhau
- Classification
- Khai thác tính năng
- Registration
Hãy để chúng tôi thảo luận về cách có thể đạt được một số trong số này bằng cách sử dụng SciPy.
Mở và ghi vào tệp hình ảnh
Các misc packagetrong SciPy đi kèm với một số hình ảnh. Chúng tôi sử dụng những hình ảnh đó để học các thao tác hình ảnh. Chúng ta hãy xem xét ví dụ sau.
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()
Chương trình trên sẽ tạo ra kết quả sau.
Bất kỳ hình ảnh nào ở định dạng thô của nó đều là sự kết hợp của các màu được biểu thị bằng các số ở định dạng ma trận. Một cỗ máy hiểu và thao tác các hình ảnh chỉ dựa trên những con số đó. RGB là một cách biểu diễn phổ biến.
Hãy cùng chúng tôi xem thông tin thống kê của hình ảnh trên.
from scipy import misc
face = misc.face(gray = False)
print face.mean(), face.max(), face.min()
Chương trình trên sẽ tạo ra kết quả sau.
110.16274388631184, 255, 0
Bây giờ, chúng ta biết rằng hình ảnh được tạo ra từ các con số, vì vậy bất kỳ thay đổi nào trong giá trị của con số sẽ làm thay đổi hình ảnh ban đầu. Hãy để chúng tôi thực hiện một số biến đổi hình học trên hình ảnh. Phép toán hình học cơ bản là cắt xén
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()
Chương trình trên sẽ tạo ra kết quả sau.
Chúng ta cũng có thể thực hiện một số thao tác cơ bản như lật ngược hình ảnh như mô tả bên dưới.
# 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()
Chương trình trên sẽ tạo ra kết quả sau.
Bên cạnh đó, chúng tôi có rotate() function, xoay hình ảnh với một góc xác định.
# 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()
Chương trình trên sẽ tạo ra kết quả sau.
Bộ lọc
Hãy để chúng tôi thảo luận về cách bộ lọc giúp xử lý hình ảnh.
Lọc trong xử lý ảnh là gì?
Lọc là một kỹ thuật để sửa đổi hoặc nâng cao hình ảnh. Ví dụ: bạn có thể lọc một hình ảnh để nhấn mạnh các tính năng nhất định hoặc loại bỏ các tính năng khác. Các hoạt động xử lý hình ảnh được thực hiện với bộ lọc bao gồm Làm mịn, Làm sắc nét và Tăng cường cạnh.
Lọc là một hoạt động lân cận, trong đó giá trị của bất kỳ pixel nhất định nào trong hình ảnh đầu ra được xác định bằng cách áp dụng một số thuật toán cho giá trị của các pixel trong vùng lân cận của pixel đầu vào tương ứng. Bây giờ chúng ta hãy thực hiện một vài thao tác bằng SciPy ndimage.
Làm mờ
Làm mờ được sử dụng rộng rãi để giảm nhiễu trong hình ảnh. Chúng ta có thể thực hiện thao tác lọc và xem sự thay đổi trong hình ảnh. Chúng ta hãy xem xét ví dụ sau.
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()
Chương trình trên sẽ tạo ra kết quả sau.
Giá trị sigma cho biết mức độ mờ trên thang điểm năm. Chúng ta có thể thấy sự thay đổi về chất lượng hình ảnh bằng cách điều chỉnh giá trị sigma. Để biết thêm chi tiết về làm mờ, hãy nhấp vào → Hướng dẫn DIP (Xử lý hình ảnh kỹ thuật số).
Phát hiện cạnh
Hãy để chúng tôi thảo luận về cách phát hiện cạnh giúp xử lý hình ảnh.
Phát hiện cạnh là gì?
Phát hiện cạnh là một kỹ thuật xử lý ảnh để tìm ranh giới của các đối tượng trong ảnh. Nó hoạt động bằng cách phát hiện sự gián đoạn về độ sáng. Phát hiện cạnh được sử dụng để phân đoạn hình ảnh và trích xuất dữ liệu trong các lĩnh vực như Xử lý hình ảnh, Thị giác máy tính và Thị giác máy.
Các thuật toán phát hiện cạnh được sử dụng phổ biến nhất bao gồm
- Sobel
- Canny
- Prewitt
- Roberts
- Các phương pháp Logic mờ
Chúng ta hãy xem xét ví dụ sau.
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()
Chương trình trên sẽ tạo ra kết quả sau.
Hình ảnh trông giống như một khối màu vuông. Bây giờ, chúng ta sẽ phát hiện các cạnh của các khối màu đó. Ở đây, ndimage cung cấp một hàm được gọi làSobelđể thực hiện thao tác này. Trong khi đó, NumPy cung cấpHypot hàm để kết hợp hai ma trận kết quả thành một.
Chúng ta hãy xem xét ví dụ sau.
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()
Chương trình trên sẽ tạo ra kết quả sau.