鍍金池/ 教程/ Python/ Scipy Ndimage
Scipy積分
Scipy優(yōu)化算法
Scipy特殊包
Scipy簇聚
Scipy ODR
Scipy Ndimage
Scipy插值
Scipy CSGraph
Scipy輸入和輸出
Scipy開發(fā)環(huán)境安裝
Scipy簡介
Scipy常量
Scipy統(tǒng)計函數
Scipy Linalg
Scipy空間
Scipy FFTpack
Scipy基本功能
Scipy教程

Scipy Ndimage

SciPy的ndimage子模塊專用于圖像處理。 這里,ndimage表示一個n維圖像。

圖像處理中一些最常見的任務如下:

  • 輸入/輸出,顯示圖像
  • 基本操作 - 裁剪,翻轉,旋轉等
  • 圖像過濾 - 去噪,銳化等
  • 圖像分割 - 標記對應于不同對象的像素
  • 分類
  • 特征提取
  • 注冊

下面來看看如何使用SciPy實現其中的一些功能。

打開和寫入圖像文件

SciPy中的misc包附帶了一些圖像。 在這里,使用這些圖像來學習圖像操作。請看看下面的例子。

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í)行上面示例代碼,得到以下輸出結果 -

原始格式的任何圖像是由矩陣格式中的數字表示的顏色的組合。 機器只能根據這些數字理解和操作圖像。 RGB是一種流行的表示方式。

下面來看看上面圖片的統(tǒng)計信息。

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í)行上面示例代碼,得到以下結果 -

110.162743886 255 0

現在,我們已經知道圖像是由數字組成的,所以數字值的任何變化都會改變原始圖像。接下來對圖像執(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í)行上面示例代碼,得到以下結果 -

也可以執(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í)行上面示例代碼,得到以下結果 -

除此之外,還有rotate()函數,它以指定的角度旋轉圖像。

# 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í)行上面示例代碼,得到以下結果 -

濾鏡

下面來看看濾鏡如何應用在圖像處理中。

圖像處理中的濾鏡是什么?

濾鏡是一種修改或增強圖像的技術。 例如,可以過濾圖像以強調某些功能或刪除其他功能。 通過濾鏡實現的圖像處理操作包括平滑,銳化和邊緣增強。

濾鏡是一種鄰域操作,其中輸出圖像中任何給定像素的值是通過對相應輸入像素的鄰域中的像素的值應用某種算法來確定的。 現在使用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í)行上面示例代碼,得到以下結果 -

sigma值表示5級模糊程度。 通過調整sigma值,可以看到圖像質量的變化。

邊緣檢測

討論邊緣檢測如何幫助圖像處理。

什么是邊緣檢測?

邊緣檢測是一種用于查找圖像內物體邊界的圖像處理技術。 它通過檢測亮度不連續(xù)性來工作。 邊緣檢測用于諸如圖像處理,計算機視覺和機器視覺等領域的圖像分割和數據提取。

最常用的邊緣檢測算法包括 -

  • 索貝爾(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()

執(zhí)行上面示例代碼,得到以下結果 -

圖像看起來像一個方塊的顏色?,F在,檢測這些彩色塊的邊緣。 這里,ndimage提供了一個叫Sobel函數來執(zhí)行這個操作。 而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()

執(zhí)行上面示例代碼,得到以下結果 -


上一篇:Scipy常量