注解
此笔记本可在此处下载: Image_Processing_Tutorial_1.ipynb
硬币检测
安装程序
from PIL import Image
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import cm
from scipy import ndimage
%matplotlib nbagg
打开文件
!ls
balls.jpg Image_Processing_Tutorial_1.ipynb Image_Processing_Tutorial_4.ipynb
bugs.jpg Image_Processing_Tutorial_2.ipynb Orientation.ipynb
coins.jpg Image_Processing_Tutorial_3.ipynb
im = Image.open('coins.jpg')
channels = im.split()
r = np.array(channels[0])
fig = plt.figure("Red Channel")
plt.imshow(r, origin = "upper", cmap = cm.gray)
plt.colorbar()
plt.show()
<IPython.core.display.Javascript object>
绘制柱状图
fig = plt.figure("Histogram")
plt.hist(r.flatten(), bins=np.arange(256), histtype = "stepfilled")
plt.show()
<IPython.core.display.Javascript object>
阈值化
seuil = 80
ims = r > seuil
binaire = np.where(ims,1,0)
fig = plt.figure("Thresholding")
plt.imshow(binaire, origin = "upper", cmap = cm.gray)
plt.colorbar()
plt.show()
<IPython.core.display.Javascript object>
侵蚀+标记
erod = ndimage.morphology.binary_erosion(binaire, structure=np.ones((10,10)))
lab, number = ndimage.measurements.label(erod)
fig = plt.figure("Erosion effect")
ax = fig.add_subplot(1, 3, 1)
ax.axis("off")
plt.title("Erosion ON")
plt.imshow(erod, origin = "upper", cmap = cm.binary)
ax = fig.add_subplot(1, 3, 2)
ax.axis("off")
plt.title("Erosion OFF")
plt.imshow(binaire, origin = "upper", cmap = cm.binary)
ax = fig.add_subplot(1, 3, 3)
ax.axis("off")
plt.title("Labeling")
plt.imshow(np.where(lab,lab,np.nan), origin = "upper", cmap = cm.jet)
#plt.colorbar()
plt.show()
print(number)
<IPython.core.display.Javascript object>
7
fig = plt.figure("Labeling")
plt.title("Nombre de grains")
plt.imshow(np.where(lab,lab,np.nan), origin = "upper", cmap = cm.inferno)
plt.colorbar()
plt.show()
<IPython.core.display.Javascript object>
索贝尔滤波器
sobx = ndimage.sobel(erod, axis=0, mode='constant')
soby = ndimage.sobel(erod, axis=1, mode='constant')
sob = np.hypot(sobx, soby)
bins = 1000
fig = plt.figure("Sobel–Feldman operator")
plt.imshow(np.where(sob > 0 , bins, r), origin = "upper",cmap = cm.gray)
plt.show()
<IPython.core.display.Javascript object>
中心定位
fig = plt.figure("Centers")
plt.imshow(np.where(erod == 1, r, np.nan), origin = "upper")
ax = fig.add_subplot(1,1,1)
#ax.axis("off")
for i in range(1,np.max(number)+1):
x,y= np.nonzero(np.where(lab==i,1,0))
xmean=x.mean()
ymean=y.mean()
plt.plot(ymean,xmean,"k+-", markersize=60)
plt.show()
<IPython.core.display.Javascript object>
fig = plt.figure()
plt.imshow(r, origin = "upper")
centers = []
for l in np.arange(1, number+1):
y, x = np.where(lab == l)
centers.append([x.mean(), y.mean()])
centers = np.array(centers).T
plt.plot(centers[0], centers[1], "or")
plt.show()
<IPython.core.display.Javascript object>
np.unique(lab)
array([0, 1, 2, 3, 4, 5, 6, 7])