python skimage影象處理(二)
影象簡單濾波
對影象進行濾波,可以有兩種效果:一種是平滑濾波,用來抑制噪聲;另一種是微分運算元,可以用來檢測邊緣和特徵提取。
skimage庫中通過filters模組進行濾波操作。
1、sobel運算元
sobel運算元可用來檢測邊緣
函式格式為:
skimage.filters.sobel(image, mask=None)
from skimage import data,filters
import matplotlib.pyplot as plt
img = data.camera()
edges = filters.sobel(img)
plt.imshow(edges,plt.cm.gray)
2、roberts運算元
roberts運算元和sobel運算元一樣,用於檢測邊緣
呼叫格式也是一樣的:
edges = filters.roberts(img)
3、scharr運算元
功能同sobel,呼叫格式:
edges = filters.scharr(img)
4、prewitt運算元
功能同sobel,呼叫格式:
edges = filters.prewitt(img)
5、canny運算元
canny運算元也是用於提取邊緣特徵,但它不是放在filters模組,而是放在feature模組
函式格式:
skimage.feature.canny(image,sigma=1.0)
可以修改sigma的值來調整效果
from skimage import data,filters,feature
import matplotlib.pyplot as plt
img = data.camera()
edges1 = feature.canny(img) #sigma=1
edges2 = feature.canny(img,sigma=3) #sigma=3
plt.figure('canny',figsize=(8,8))
plt.subplot(121)plt.imshow(edges1,plt.cm.gray) plt.subplot(122)plt.imshow(edges2,plt.cm.gray)
plt.show()
從結果可以看出,sigma越小,邊緣線條越細小。
6、gabor濾波
gabor濾波可用來進行邊緣檢測和紋理特徵提取。
函式呼叫格式:
skimage.filters.gabor_filter(image, frequency)
通過修改frequency值來調整濾波效果,返回一對邊緣結果,一個是用真實濾波核的濾波結果,一個是想象的濾波核的濾波結果。
from skimage import data,filters
import matplotlib.pyplot as plt
img = data.camera()
filt_real, filt_imag = filters.gabor_filter(img,frequency=0.6)
plt.figure('gabor',figsize=(8,8))
plt.subplot(121)
plt.title('filt_real')
plt.imshow(filt_real,plt.cm.gray)
plt.subplot(122)
plt.title('filt-imag')
plt.imshow(filt_imag,plt.cm.gray)
plt.show()
以上為frequency=0.6的結果圖。
以上為frequency=0.1的結果圖
7、gaussian濾波
多維的濾波器,是一種平滑濾波,可以消除高斯噪聲。
呼叫函式為:
skimage.filters.gaussian_filter(image, sigma)
通過調節sigma的值來調整濾波效果
from skimage import data,filters
import matplotlib.pyplot as plt
img = data.astronaut()
edges1 = filters.gaussian_filter(img,sigma=0.4) #sigma=0.4
edges2 = filters.gaussian_filter(img,sigma=5) #sigma=5
plt.figure('gaussian',figsize=(8,8))
plt.subplot(121)
plt.imshow(edges1,plt.cm.gray)
plt.subplot(122)
plt.imshow(edges2,plt.cm.gray)
plt.show()
可見sigma越大,過濾後的影象越模糊
8.median
中值濾波,一種平滑濾波,可以消除噪聲。
需要用skimage.morphology模組來設定濾波器的形狀。
from skimage import data,filters
import matplotlib.pyplot as plt
from skimage.morphology import disk
img = data.camera()
edges1 = filters.median(img,disk(5))
edges2= filters.median(img,disk(9))
plt.figure('median',figsize=(8,8))
plt.subplot(121)
plt.imshow(edges1,plt.cm.gray)
plt.subplot(122)
plt.imshow(edges2,plt.cm.gray)
plt.show()
從結果可以看出,濾波器越大,影象越模糊。
9、水平、垂直邊緣檢測
上邊所舉的例子都是進行全部邊緣檢測,有些時候我們只需要檢測水平邊緣,或垂直邊緣,就可用下面的方法。
水平邊緣檢測:sobel_h, prewitt_h, scharr_h
垂直邊緣檢測: sobel_v, prewitt_v, scharr_v
from skimage import data,filters
import matplotlib.pyplot as plt
img = data.camera()
edges1 = filters.sobel_h(img)
edges2 = filters.sobel_v(img)
plt.figure('sobel_v_h',figsize=(8,8))
plt.subplot(121)
plt.imshow(edges1,plt.cm.gray)
plt.subplot(122)
plt.imshow(edges2,plt.cm.gray)
plt.show()
上邊左圖為檢測出的水平邊緣,右圖為檢測出的垂直邊緣。
10、交叉邊緣檢測
可使用Roberts的十字交叉核來進行過濾,以達到檢測交叉邊緣的目的。這些交叉邊緣實際上是梯度在某個方向上的一個分量。
其中一個核:
0 1
-1 0
對應的函式:
roberts_neg_diag(image)
例:
from skimage import data,filters
import matplotlib.pyplot as plt
img =data.camera()
dst =filters.roberts_neg_diag(img)
plt.figure('filters',figsize=(8,8))
plt.subplot(121)plt.title('origin image')
plt.imshow(img,plt.cm.gray)
plt.subplot(122)
plt.title('filted image')
plt.imshow(dst,plt.cm.gray)
另外一個核:
1 0
0 -1
對應函式為:
roberts_pos_diag(image)
from skimage import data,filters
import matplotlib.pyplot as plt
img =data.camera()
dst =filters.roberts_pos_diag(img)
plt.figure('filters',figsize=(8,8))
plt.subplot(121)
plt.title('origin image')
plt.imshow(img,plt.cm.gray)
plt.subplot(122)
plt.title('filted image')
plt.imshow(dst,plt.cm.gray)
影象自動閾值分割
影象閾值分割是一種廣泛應用的分割技術,利用影象中要提取的目標區域與其背景在灰度特性上的差異,把影象看作具有不同灰度級的兩類區域(目標區域和背景區域)的組合,選取一個比較合理的閾值,以確定影象中每個畫素點應該屬於目標區域還是背景區域,從而產生相應的二值影象。
在skimage庫中,閾值分割的功能是放在filters模組中。
我們可以手動指定一個閾值,從而來實現分割。也可以讓系統自動生成一個閾值,下面幾種方法就是用來自動生成閾值。
1、threshold_otsu
基於Otsu的閾值分割方法,函式呼叫格式:
skimage.filters.threshold_otsu(image, nbins=256)
引數image是指灰度影象,返回一個閾值。
from skimage import data,filters
import matplotlib.pyplot as plt
image = data.camera()
thresh = filters.threshold_otsu(image) #返回一個閾值
dst =(image <= thresh)*1.0 #根據閾值進行分割
plt.figure('thresh',figsize=(8,8))
plt.subplot(121)
plt.title('original image')
plt.imshow(image,plt.cm.gray)
plt.subplot(122)
plt.title('binary image')
plt.imshow(dst,plt.cm.gray)
plt.show()
返回閾值為87,根據87進行分割得下圖:
2、threshold_yen
使用方法同上:
thresh = filters.threshold_yen(image)
返回閾值為198,分割如下圖:
3、threshold_li
使用方法同上:
thresh = filters.threshold_li(image)
返回閾值64.5,分割如下圖:
4、threshold_isodata
閾值計算方法:
threshold = (image[image <= threshold].mean() +image[image > threshold].mean()) / 2.0
使用方法同上:
thresh = filters.threshold_isodata(image)
返回閾值為87,因此分割效果和threshold_otsu一樣。
5、threshold_adaptive
呼叫函式為:
skimage.filters.threshold_adaptive(image, block_size, method='gaussian')
block_size: 塊大小,指當前畫素的相鄰區域大小,一般是奇數(如3,5,7。。。)
method: 用來確定自適應閾值的方法,有'mean', 'generic', 'gaussian' 和 'median'。省略時預設為gaussian
該函式直接訪問一個閾值後的影象,而不是閾值。
from skimage import data,filters
import matplotlib.pyplot as plt
image = data.camera()
dst =filters.threshold_adaptive(image, 15) #返回一個閾值影象
plt.figure('thresh',figsize=(8,8))
plt.subplot(121)
plt.title('original image')
plt.imshow(image,plt.cm.gray)
plt.subplot(122)
plt.title('binary image')
plt.imshow(dst,plt.cm.gray)
plt.show()
大家可以修改block_size的大小和method值來檢視更多的效果。如:
dst1 =filters.threshold_adaptive(image,31,'mean')
dst2 =filters.threshold_adaptive(image,5,'median')
兩種效果如下:
基本圖形的繪製
圖形包括線條、圓形、橢圓形、多邊形等。
在skimage包中,繪製圖形用的是draw模組,不要和繪製圖像搞混了。
1、畫線條
函式呼叫格式為:
skimage.draw.line(r1,c1,r2,c2)
r1,r2: 開始點的行數和結束點的行數
c1,c2: 開始點的列數和結束點的列數
返回當前繪製圖形上所有點的座標,如:
rr, cc =draw.line(1, 5, 8, 2)
表示從(1,5)到(8,2)連一條線,返回線上所有的畫素點座標[rr,cc]
from skimage import draw,data
import matplotlib.pyplot as plt
img=data.chelsea()
rr, cc =draw.line(1, 150, 470, 450)
img[rr, cc] =255
plt.imshow(img,plt.cm.gray)
如果想畫其它顏色的線條,則可以使用set_color()函式,格式為:
skimage.draw.set_color(img, coords, color)
例:
draw.set_color(img,[rr,cc],[255,0,0])
則繪製紅色線條。
from skimage import draw,data
import matplotlib.pyplot as plt
img=data.chelsea()
rr, cc =draw.line(1, 150, 270, 250)
draw.set_color(img,[rr,cc],[0,0,255])
plt.imshow(img,plt.cm.gray)
2、畫圓
函式格式:
skimage.draw.circle(cy, cx, radius)
cy和cx表示圓心點,radius表示半徑
from skimage import draw,data
import matplotlib.pyplot as plt
img=data.chelsea()
rr, cc=draw.circle(150,150,50)
draw.set_color(img,[rr,cc],[255,0,0])
plt.imshow(img,plt.cm.gray)
3、多邊形
函式格式:
skimage.draw.polygon(Y,X)
Y為多邊形頂點的行集合,X為各頂點的列值集合。
from skimage import draw,data
import matplotlib.pyplot as plt
import numpy as np
img=data.chelsea()
Y=np.array([10,10,60,60])
X=np.array([200,400,400,200])
rr, cc=draw.polygon(Y,X)
draw.set_color(img,[rr,cc],[255,0,0])
plt.imshow(img,plt.cm.gray)
我在此處只設置了四個頂點,因此是個四邊形。
4、橢圓
格式:
skimage.draw.ellipse(cy, cx, yradius, xradius)
cy和cx為中心點座標,yradius和xradius代表長短軸。
from skimage import draw,data
import matplotlib.pyplot as plt
img=data.chelsea()
rr, cc=draw.ellipse(150, 150, 30, 80)
draw.set_color(img,[rr,cc],[255,0,0])
plt.imshow(img,plt.cm.gray)
5、貝塞兒曲線
格式:
skimage.draw.bezier_curve(y1,x1,y2,x2,y3,x3,weight)
y1,x1表示第一個控制點座標
y2,x2表示第二個控制點座標
y3,x3表示第三個控制點座標
weight表示中間控制點的權重,用於控制曲線的彎曲度。
from skimage import draw,data
import matplotlib.pyplot as plt
img=data.chelsea()
rr, cc=draw.bezier_curve(150,50,50,280,260,400,2)
draw.set_color(img,[rr,cc],[255,0,0])
plt.imshow(img,plt.cm.gray)
6、畫空心圓
和前面的畫圓是一樣的,只是前面是實心圓,而此處畫空心圓,只有邊框線。
格式:
skimage.draw.circle_perimeter(yx,yc,radius)
yx,yc是圓心座標,radius是半徑
from skimage import draw,data
import matplotlib.pyplot as plt
img=data.chelsea()
rr, cc=draw.circle_perimeter(150,150,50)
draw.set_color(img,[rr,cc],[255,0,0])
plt.imshow(img,plt.cm.gray)
7、空心橢圓
格式:
skimage.draw.ellipse_perimeter(cy, cx, yradius, xradius)
cy,cx表示圓心
yradius,xradius表示長短軸
from skimage import draw,data
import matplotlib.pyplot as plt
img=data.chelsea()
rr, cc=draw.ellipse_perimeter(150, 150, 30, 80)
draw.set_color(img,[rr,cc],[255,0,0])
plt.imshow(img,plt.cm.gray)
基本形態學濾波
對影象進行形態學變換。變換物件一般為灰度圖或二值圖,功能函式放在morphology子模組內。
1、膨脹(dilation)
原理:一般對二值影象進行操作。找到畫素值為1的點,將它的鄰近畫素點都設定成這個值。1值表示白,0值表示黑,因此膨脹操作可以擴大白色值範圍,壓縮黑色值範圍。一般用來擴充邊緣或填充小的孔洞。
功能函式:
skimage.morphology.dilation(image, selem=None)
selem表示結構元素,用於設定區域性區域的形狀和大小。
from skimage import data
import skimage.morphology as sm
import matplotlib.pyplot as plt
img=data.checkerboard()
dst1=sm.dilation(img,sm.square(5)) #用邊長為5的正方形濾波器進行膨脹濾波
dst2=sm.dilation(img,sm.square(15)) #用邊長為15的正方形濾波器進行膨脹濾波
plt.figure('morphology',figsize=(8,8))
plt.subplot(131)
plt.title('origin image')
plt.imshow(img,plt.cm.gray)
plt.subplot(132)
plt.title('morphological image')
plt.imshow(dst1,plt.cm.gray)
plt.subplot(133)
plt.title('morphological image')
plt.imshow(dst2,plt.cm.gray)
分別用邊長為5或15的正方形濾波器對棋盤圖片進行膨脹操作,結果如下:
可見濾波器的大小,對操作結果的影響非常大。一般設定為奇數。
除了正方形的濾波器外,濾波器的形狀還有一些,現列舉如下:
morphology.square: 正方形
morphology.disk: 平面圓形
morphology.ball: 球形
morphology.cube: 立方體形
morphology.diamond: 鑽石形
morphology.rectangle: 矩形
morphology.star: 星形
morphology.octagon: 八角形
morphology.octahedron: 八面體
注意,如果處理影象為二值影象(只有0和1兩個值),則可以呼叫:
skimage.morphology.binary_dilation(image, selem=None)
用此函式比處理灰度影象要快。
2、腐蝕(erosion)
函式:
skimage.morphology.erosion(image, selem=None)
selem表示結構元素,用於設定區域性區域的形狀和大小。
和膨脹相反的操作,將0值擴充到鄰近畫素。擴大黑色部分,減小白色部分。可用來提取骨幹資訊,去掉毛刺,去掉孤立的畫素。
from skimage import data
import skimage.morphology as sm
import matplotlib.pyplot as plt
img=data.checkerboard()
dst1=sm.erosion(img,sm.square(5)) #用邊長為5的正方形濾波器進行膨脹濾波
dst2=sm.erosion(img,sm.square(25)) #用邊長為25的正方形濾波器進行膨脹濾波
plt.figure('morphology',figsize=(8,8))
plt.subplot(131)
plt.title('origin image')
plt.imshow(img,plt.cm.gray)
plt.subplot(132)
plt.title('morphological image')
plt.imshow(dst1,plt.cm.gray)
plt.subplot(133)
plt.title('morphological image')
plt.imshow(dst2,plt.cm.gray)
注意,如果處理影象為二值影象(只有0和1兩個值),則可以呼叫:
skimage.morphology.binary_erosion(image, selem=None)
用此函式比處理灰度影象要快。
3、開運算(opening)
函式:
skimage.morphology.openning(image, selem=None)
selem表示結構元素,用於設定區域性區域的形狀和大小。
先腐蝕再膨脹,可以消除小物體或小斑塊。
from skimage import io,color
import skimage.morphology as sm
import matplotlib.pyplot as plt
img=color.rgb2gray(io.imread('d:/pic/mor.png'))
dst=sm.opening(img,sm.disk(9)) #用邊長為9的圓形濾波器進行膨脹濾波
plt.figure('morphology',figsize=(8,8))
plt.subplot(121)
plt.title('origin image')
plt.imshow(img,plt.cm.gray)
plt.axis('off')
plt.subplot(122)
plt.title('morphological image')
plt.imshow(dst,plt.cm.gray)
plt.axis('off')
注意,如果處理影象為二值影象(只有0和1兩個值),則可以呼叫:
skimage.morphology.binary_opening(image, selem=None)
用此函式比處理灰度影象要快。
4、閉運算(closing)
函式:
skimage.morphology.closing(image, selem=None)
selem表示結構元素,用於設定區域性區域的形狀和大小。
先膨脹再腐蝕,可用來填充孔洞。
from skimage import io,color
import skimage.morphology as sm
import matplotlib.pyplot as plt
img=color.rgb2gray(io.imread('d:/pic/mor.png'))
dst=sm.closing(img,sm.disk(9)) #用邊長為5的圓形濾波器進行膨脹濾波
plt.figure('morphology',figsize=(8,8))
plt.subplot(121)
plt.title('origin image')
plt.imshow(img,plt.cm.gray)
plt.axis('off')
plt.subplot(122)
plt.title('morphological image')
plt.imshow(dst,plt.cm.gray)
plt.axis('off')
注意,如果處理影象為二值影象(只有0和1兩個值),則可以呼叫:
skimage.morphology.binary_closing(image, selem=None)
用此函式比處理灰度影象要快。
5、白帽(white-tophat)
函式:
skimage.morphology.white_tophat(image, selem=None)
selem表示結構元素,用於設定區域性區域的形狀和大小。
將原影象減去它的開運算值,返回比結構化元素小的白點
from skimage import io,color
import skimage.morphology as sm
import matplotlib.pyplot as plt
img=color.rgb2gray(io.imread('d:/pic/mor.png'))
dst=sm.white_tophat(img,sm.square(21))
plt.figure('morphology',figsize=(8,8))
plt.subplot(121)plt.title('origin image')
plt.imshow(img,plt.cm.gray)
plt.axis('off')
plt.subplot(122)
plt.title('morphological image')
plt.imshow(dst,plt.cm.gray)
plt.axis('off')
6、黑帽(black-tophat)
函式:
skimage.morphology.black_tophat(image, selem=None)
selem表示結構元素,用於設定區域性區域的形狀和大小。
將原影象減去它的閉運算值,返回比結構化元素小的黑點,且將這些黑點反色。
from skimage import io,color
import skimage.morphology as sm
import matplotlib.pyplot as plt
img=color.rgb2gray(io.imread('d:/pic/mor.png'))
dst=sm.black_tophat(img,sm.square(21))
plt.figure('morphology',figsize=(8,8))
plt.subplot(121)
plt.title('origin image')
plt.imshow(img,plt.cm.gray)
plt.axis('off')
plt.subplot(122)
plt.title('morphological image')
plt.imshow(dst,plt.cm.gray)
plt.axis('off')
高階濾波
本文提供更多更強大的濾波方法,這些方法放在filters.rank子模組內。
這些方法需要使用者自己設定濾波器的形狀和大小,因此需要匯入morphology模組來設定。
1、autolevel
這個詞在photoshop裡面翻譯成自動色階,用區域性直方圖來對圖片進行濾波分級。
該濾波器區域性地拉伸灰度畫素值的直方圖,以覆蓋整個畫素值範圍。
格式:
skimage.filters.rank.autolevel(image, selem)
selem表示結構化元素,用於設定濾波器。
from skimage import data,color
import matplotlib.pyplot as plt
from skimage.morphology import disk
import skimage.filters.rank as sfr
img =color.rgb2gray(data.lena())
auto =sfr.autolevel(img, disk(5)) #半徑為5的圓形濾波器
plt.figure('filters',figsize=(8,8))
plt.subplot(121)
plt.title('origin image')
plt.imshow(img,plt.cm.gray)
plt.subplot(122)
plt.title('filted image')
plt.imshow(auto,plt.cm.gray)
2、bottomhat 與 tophat
bottomhat: 此濾波器先計算影象的形態學閉運算,然後用原影象減去運算的結果值,有點像黑帽操作。
bophat: 此濾波器先計算影象的形態學開運算,然後用原影象減去運算的結果值,有點像白帽操作。
格式:
skimage.filters.rank.bottomhat(image, selem)
skimage.filters.rank.tophat(image, selem)
selem表示結構化元素,用於設定濾波器。
下面是bottomhat濾波的例子:
from skimage import data,color
import matplotlib.pyplot as plt
from skimage.morphology import disk
import skimage.filters.rank as sfr
img =color.rgb2gray(data.lena())
auto =sfr.bottomhat(img, disk(5)) #半徑為5的圓形濾波器
plt.figure('filters',figsize=(8,8))
plt.subplot(121)
plt.title('origin image')
plt.imshow(img,plt.cm.gray)
plt.subplot(122)
plt.title('filted image')
plt.imshow(auto,plt.cm.gray)
3、enhance_contrast
對比度增強。求出區域性區域的最大值和最小值,然後看當前點畫素值最接近最大值還是最小值,然後替換為最大值或最小值。
函式:
enhance_contrast(image, selem)
selem表示結構化元素,用於設定濾波器。
from skimage import data,color
import matplotlib.pyplot as plt
from skimage.morphology import disk
import skimage.filters.rank as sfr
img =color.rgb2gray(data.lena())
auto =sfr.enhance_contrast(img, disk(5)) #半徑為5的圓形濾波器plt.figure('filters',figsize=(8,8))
plt.subplot(121)
plt.title('origin image')
plt.imshow(img,plt.cm.gray)
plt.subplot(122)
plt.title('filted image')
plt.imshow(auto,plt.cm.gray)
4、entropy
求區域性熵,熵是使用基為2的對數運算出來的。該函式將區域性區域的灰度值分佈進行二進位制編碼,返回編碼的最小值。
函式格式:
entropy(image, selem)
selem表示結構化元素,用於設定濾波器。
from skimage import data,color
import matplotlib.pyplot as plt
from skimage.morphology import disk
import skimage.filters.rank as sfr
img =color.rgb2gray(data.lena())
dst =sfr.entropy(img, disk(5)) #半徑為5的圓形濾波器
plt.figure('filters',figsize=(8,8))
plt.subplot(121)
plt.title('origin image')
plt.imshow(img,plt.cm.gray)
plt.subplot(122)
plt.title('filted image')
plt.imshow(dst,plt.cm.gray)
5、equalize
均衡化濾波。利用區域性直方圖對影象進行均衡化濾波。
函式格式:
equalize(image, selem)
selem表示結構化元素,用於設定濾波器。
from skimage import data,color
import matplotlib.pyplot as plt
from skimage.morphology import disk
import skimage.filters.rank as sfr
img =color.rgb2gray(data.lena())
dst =sfr.equalize(img, disk(5)) #半徑為5的圓形濾波器
plt.figure('filters',figsize=(8,8))
plt.subplot(121)
plt.title('origin image')
plt.imshow(img,plt.cm.gray)
plt.subplot(122)
plt.title('filted image')
plt.imshow(dst,plt.cm.gray)
6、gradient
返回影象的區域性梯度值(如:最大值-最小值),用此梯度值代替區域內所有畫素值。
函式格式:
gradient(image, selem)
selem表示結構化元素,用於設定濾波器。
from skimage import data,color
import matplotlib.pyplot as plt
from skimage.morphology import disk
import skimage.filters.rank as sfr
img =color.rgb2gray(data.lena())
dst =sfr.gradient(img, disk(5)) #半徑為5的圓形濾波器
plt.figure('filters',figsize=(8,8))
plt.subplot(121)plt.title('origin image')
plt.imshow(img,plt.cm.gray)
plt.subplot(122)plt.title('filted image')
plt.imshow(dst,plt.cm.gray)
7、其它濾波器
濾波方式很多,下面不再一一詳細講解,僅給出核心程式碼,所有的函式呼叫方式都是一樣的。
最大值濾波器(maximum):返回影象區域性區域的最大值,用此最大值代替該區域內所有畫素值。
dst =sfr.maximum(img, disk(5))
最小值濾波器(minimum):返回影象區域性區域內的最小值,用此最小值取代該區域內所有畫素值。
dst =sfr.minimum(img, disk(5))
均值濾波器(mean) : 返回影象區域性區域內的均值,用此均值取代該區域內所有畫素值。
dst =sfr.mean(img, disk(5))
中值濾波器(median): 返回影象區域性區域內的中值,用此中值取代該區域內所有畫素值。
dst =sfr.median(img, disk(5))
莫代爾濾波器(modal) : 返回影象區域性區域內的modal值,用此值取代該區域內所有畫素值。
dst =sfr.modal(img, disk(5))
otsu閾值濾波(otsu): 返回影象區域性區域內的otsu閾值,用此值取代該區域內所有畫素值。
dst =sfr.otsu(img, disk(5))
閾值濾波(threshhold): 將影象區域性區域中的每個畫素值與均值比較,大於則賦值為1,小於賦值為0,得到一個二值影象。
dst =sfr.threshold(img, disk(5))
減均值濾波(subtract_mean): 將區域性區域中的每一個畫素,減去該區域中的均值。
dst =sfr.subtract_mean(img, disk(5))
求和濾波(sum) :求區域性區域的畫素總和,用此值取代該區域內所有畫素值。
dst =sfr.sum(img, disk(5))
相關推薦
python skimage影象處理(二)
影象簡單濾波對影象進行濾波,可以有兩種效果:一種是平滑濾波,用來抑制噪聲;另一種是微分運算元,可以用來檢測邊緣和特徵提取。skimage庫中通過filters模組進行濾波操作。1、sobel運算元sobel運算元可用來檢測邊緣函式格式為:skimage.filters.sobel(image, mask=No
Python 讀取顯示儲存圖片----python skimage影象處理
基於python指令碼語言開發的數字圖片處理包,比如PIL,Pillow, opencv, scikit-image等。PIL和Pillow只提供最基礎的數字影象處理,功能有限;opencv實際上是一個c++庫,只是提供了python介面,更新速度非常慢。scikit-i
python skimage影象處理(一)
本文轉自 python數字影象處理 基於python指令碼語言開發的數字圖片處理包,比如PIL,Pillow, opencv, scikit-image等。PIL和Pillow只提供最基礎的數字影象處理,功能有限;opencv實際上是一個c++庫,只是提供了python介面,更新速
python skimage影象處理
基於python指令碼語言開發的數字圖片處理包,比如PIL,Pillow, opencv, scikit-image等。PIL和Pillow只提供最基礎的數字影象處理,功能有限;opencv實際上是一個c++庫,只是提供了python介面,更新速度非常慢。sc
python+OpenCV影象處理(十二)車牌定位中對影象的形態學組合操作處理
車牌定位中對影象的形態學組合操作處理 所謂的車牌定位,其中最關鍵的部分就是對圖片的處理,引數的設定,並使之擁有泛化能力。 首先傳入圖片,在進行大規模的圖片處理時,因為無法確定圖片的尺寸,所以需要將原始圖片進行等比例的縮放。 orgimg = cv2.imread('ch
Python——pygame影象處理(二)
上接: Python——pygame影象處理(一) 4. 一直移到最右邊: import pygame,sys pygame.init() screen = pygame.display.set_mode([640,480]) screen.fill([255
影象處理-python實現影象處理(消噪,直方圖均衡化,二值化,形態學)
1、選用合適的影象增強方法對以下給定影象進行增強操作以獲取清晰影象; 2、對增強後的影象進行閾值處理,獲得二值影象; 3、對二值影象進行形態學分析,提取有用資訊區域(即只剩下字母和數字區域); python程式: import c
python 簡單影象處理(13) 二值圖腐蝕和膨脹,開運算、閉運算
我們直接看圖吧 我們把粗框內的區域看作原影象 假設有一個圓在影象空間移動,取一個點作為圓的中心,若圓的區域被完全包含在原影象中 則我們把它放到腐蝕後的區域中 若只有一部分在原影象區域或沒有一個點在原圖區域中,我們則不會把它放在腐蝕區中 顯然,粗框區域腐蝕後會變成內部填充框區域 而膨脹卻恰恰相反 把粗框線
python PIL 影象處理 (二)
第 1 章 基本的影象操作和處理 本章講解操作和處理影象的基礎知識,將通過大量示例介紹處理影象所需的 Python 工具包,並介紹用於讀取影象、影象轉換和縮放、計算導數、畫圖和儲存結果等的基本工具。這些工具的使用將貫穿本書的剩餘章節。 1.1 PIL:Py
【影象處理】使用OpenCV+Python進行影象處理入門教程(二)
這篇隨筆介紹使用OpenCV進行影象處理的第二章 影象的運算,讓我們踏上繼續回顧OpenCV進行影象處理的奇妙之旅,不斷地總結、回顧,以新的視角快速融入計算機視覺的奧祕世界。 2 影象的運算  
python影象處理---python的影象處理模組Image-
【python影象處理】python的影象處理模組Image 版本資訊:2.7.11 環境:windows 7 64位系統 編輯器:PyCharm 執行工具:PyCharm 檔案地址:D:\phpStudy\WWW\python\Image 一、引入影象模組
用Python做影象處理
用Python做影象處理 用Python做影象處理 最近在做一件比較 evil 的事情——驗證碼識別,以此來學習一些新的技能。因為我是初學,對影象處理方面就不太瞭解了,欲要利吾事,必先利吾器
python PIL影象處理筆記
#coding:utf-8 from PIL import Image from PIL import ImageFilter im = Image.open('./1.jpg') #im.show() #開啟圖片 #im.save('./kda4.png') #儲存並儲存,可以轉換格式 #pri
python數字影象處理(2):影象的讀取、顯示與儲存
skimage提供了io模組,顧名思義,這個模組是用來圖片輸入輸出操作的。為了方便練習,也提供一個data模組,裡面嵌套了一些示例圖片,我們可以直接使用。 引入skimage模組可用: 1 from skimage import io
python數字影象處理(3):影象畫素的訪問與裁剪
圖片讀入程式中後,是以numpy陣列存在的。因此對numpy陣列的一切功能,對圖片也適用。對陣列元素的訪問,實際上就是對圖片畫素點的訪問。 彩色圖片訪問方式為: img[i,j,c] i表示圖片的行數,j表示圖片的列數,c表示圖片的通道數(RGB三通道分別對應0,1
影象處理二:仿射變換和透視變換
一、仿射變換(Affine Transformation) 放射變換(平面變換、二維座標變換):是空間直角座標系的變換,從一個二維座標變換到另一個二維座標,仿射變換是一個線性變換,保持了影象的“平行性”和“平直性”,即影象中原來的直線和
python數字影象處理(18):高階形態學處理
形態學處理,除了最基本的膨脹、腐蝕、開/閉運算、黑/白帽處理外,還有一些更高階的運用,如凸包,連通區域標記,刪除小塊區域等。 1、凸包 凸包是指一個凸多邊形,這個凸多邊形將圖片中所有的白色畫素點都包含在內。 函式為: skimage.morphology.conv
Python+OpenCV影象處理(九)—— 模板匹配
百度百科:模板匹配是一種最原始、最基本的模式識別方法,研究某一特定物件物的圖案位於影象的什麼地方,進而識別物件物,這就是一個匹配問題。它是影象處理中最基本、最常用的匹配方法。模板匹配具有自身的侷限性,主要表現在它只能進行平行移動,若原影象中的匹配目標發生旋轉或大小變化,該演算
python+opencv影象處理——影象梯度——scharr運算元
sobel運算元不怎麼用,一般scharr運算元運用的比較多 import cv2 import sys import numpy as np o=cv2.imread("C:\\User
Python——pygame影象處理
一. 單個畫素 有時我們並不想畫一個圓或矩形,而是希望畫單個的點或畫素。比如畫一條正弦曲線。 import pygame,sys,math pygame.init() screen = pygame.display.set_mode([640,480]) sc