SciPy的ndimage子模塊專用于圖像處理。 這里,ndimage表示一個(gè)n維圖像。
圖像處理中一些最常見的任務(wù)如下:
下面來看看如何使用SciPy實(shí)現(xiàn)其中的一些功能。
SciPy中的misc包附帶了一些圖像。 在這里,使用這些圖像來學(xué)習(xí)圖像操作。請(qǐng)看看下面的例子。
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()
執(zhí)行上面示例代碼,得到以下輸出結(jié)果 -
原始格式的任何圖像是由矩陣格式中的數(shù)字表示的顏色的組合。 機(jī)器只能根據(jù)這些數(shù)字理解和操作圖像。 RGB是一種流行的表示方式。
下面來看看上面圖片的統(tǒng)計(jì)信息。
from scipy import misc
f = misc.face()
misc.imsave('face.png', f) # uses the Image module (PIL)
face = misc.face(gray = False)
print (face.mean(), face.max(), face.min())
執(zhí)行上面示例代碼,得到以下結(jié)果 -
110.162743886 255 0
現(xiàn)在,我們已經(jīng)知道圖像是由數(shù)字組成的,所以數(shù)字值的任何變化都會(huì)改變?cè)紙D像。接下來對(duì)圖像執(zhí)行一些幾何變換。 基本的幾何操作是裁剪 -
from scipy import misc
f = misc.face()
misc.imsave('face.png', f) # uses the Image module (PIL)
face = misc.face(gray = True)
lx, ly = face.shape
crop_face = face[int(lx/4): -int(lx/4), int(ly/4): -int(ly/4)]
import matplotlib.pyplot as plt
plt.imshow(crop_face)
plt.show()
執(zhí)行上面示例代碼,得到以下結(jié)果 -

也可以執(zhí)行一些基本的操作,例如像下面描述的那樣倒置圖像。參考以下代碼 -
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()
執(zhí)行上面示例代碼,得到以下結(jié)果 -

除此之外,還有rotate()函數(shù),它以指定的角度旋轉(zhuǎn)圖像。
# 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()
執(zhí)行上面示例代碼,得到以下結(jié)果 -
下面來看看濾鏡如何應(yīng)用在圖像處理中。
圖像處理中的濾鏡是什么?
濾鏡是一種修改或增強(qiáng)圖像的技術(shù)。 例如,可以過濾圖像以強(qiáng)調(diào)某些功能或刪除其他功能。 通過濾鏡實(shí)現(xiàn)的圖像處理操作包括平滑,銳化和邊緣增強(qiáng)。
濾鏡是一種鄰域操作,其中輸出圖像中任何給定像素的值是通過對(duì)相應(yīng)輸入像素的鄰域中的像素的值應(yīng)用某種算法來確定的。 現(xiàn)在使用SciPy ndimage執(zhí)行一些操作。
模糊
模糊廣泛用于減少圖像中的噪聲。 可以執(zhí)行過濾操作并查看圖像中的更改??纯聪旅娴睦?。
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()
執(zhí)行上面示例代碼,得到以下結(jié)果 -
sigma值表示5級(jí)模糊程度。 通過調(diào)整sigma值,可以看到圖像質(zhì)量的變化。
討論邊緣檢測(cè)如何幫助圖像處理。
什么是邊緣檢測(cè)?
邊緣檢測(cè)是一種用于查找圖像內(nèi)物體邊界的圖像處理技術(shù)。 它通過檢測(cè)亮度不連續(xù)性來工作。 邊緣檢測(cè)用于諸如圖像處理,計(jì)算機(jī)視覺和機(jī)器視覺等領(lǐng)域的圖像分割和數(shù)據(jù)提取。
最常用的邊緣檢測(cè)算法包括 -
看看下面的一個(gè)例子。
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()
執(zhí)行上面示例代碼,得到以下結(jié)果 -
圖像看起來像一個(gè)方塊的顏色?,F(xiàn)在,檢測(cè)這些彩色塊的邊緣。 這里,ndimage提供了一個(gè)叫Sobel函數(shù)來執(zhí)行這個(gè)操作。 而NumPy提供了Hypot函數(shù)來將兩個(gè)合成矩陣合并為一個(gè)。
看看下面的一個(gè)例子。參考以下實(shí)現(xiàn)代碼 -
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()
執(zhí)行上面示例代碼,得到以下結(jié)果 -