蒲瑞维特算子
蒲瑞维特算子(英語:Prewitt Operator)是一種在影像處理中,用於邊緣檢測的離散微分運算子。此算子由Judith M. S. Prewitt發明,並以她的名字命名[1]。蒲瑞维特算子通過在水平方向和垂直方向上對影像進行捲積,使用一個小型的整數值濾波器來完成運算,因此在計算成本方面相對較低,類似於索伯算子。蒲瑞维特算子的優點在於其計算簡單且效率高,適合於需要快速邊緣檢測的應用場景。 然而,其粗糙的梯度近似使得它在處理細節豐富或高頻率變化較多的影像時效果不佳。為了更準確地檢測邊緣,通常需要使用如坎尼算子等更先進的方法。 公式蒲瑞维特算子包含兩個3x3的矩陣,分別為水平方向以及垂直方向,表示為與。 利用上述兩矩陣與影像做2d卷積運算,即可達到水平向與垂直向差分的效果,得到其對應亮度梯度向量,公式如下: 在這裏運算子'*'代表的2d卷積運算,A代表的是原影像。 對於影像中每個點的梯度值,透過以下公式得到: 運用與,可以計算其梯度向量: 實作在實作上,因為只有該點的周圍八個點需要被計算,同時在梯度向量的計算上也都只牽涉到整數的加法計算,而且上述的兩個離散濾波器是可分解的:
範例
程式範例# Read image and convert it into grayscale
img_file = '<name of input image file>.<file format>'
img = np.array(Image.open(img_file).convert('L'))
# Prepare edge, horizontal edge and vertical edge image arrays
edge_img = np.zeros_like(img)
horizontal_edge_img = np.zeros_like(img)
vertical_edge_img = np.zeros_like(img)
# Prewitt operator matrices
Mx = np.array([[1, 1, 1], [0, 0, 0], [-1, -1, -1]])
My = np.array([[1, 0, -1], [1, 0, -1], [1, 0, -1]])
# Perform 2d convolution
for i in range(1, img.shape[0]-1):
for j in range(1, img.shape[1]-1):
A = img[i-1:i+2, j-1:j+2]
Gx = np.sum(Mx * A)
Gy = np.sum(My * A)
horizontal_edge_img[i][j] = abs(Gx)
vertical_edge_img[i][j] = abs(Gy)
edge_img[i][j] = np.sqrt(Gx ** 2 + Gy ** 2)
# Define a threshold value
thresholdValue = 80
edge_img = np.where(edge_img < thresholdValue, 0, edge_img)
horizontal_edge_img = np.where(horizontal_edge_img < thresholdValue, 0, horizontal_edge_img)
vertical_edge_img = np.where(vertical_edge_img < thresholdValue, 0, vertical_edge_img)
plt.figure()
plt.subplot(221)
plt.axis('off'); plt.title('Grayscale image of fruits'); plt.imshow(img, cmap='gray', vmin=0, vmax=255)
plt.subplot(222)
plt.axis('off')
plt.title('Horizontal edge')
plt.imshow(horizontal_edge_img, cmap='gray', vmin=0, vmax=255)
plt.subplot(223)
plt.axis('off')
plt.title('Vertical edge')
plt.imshow(vertical_edge_img, cmap='gray', vmin=0, vmax=255)
plt.subplot(224)
plt.axis('off')
plt.title('Edge image')
plt.imshow(edge_img, cmap='gray', vmin=0, vmax=255)
plt.show()
參見参考资料
|
Index:
pl ar de en es fr it arz nl ja pt ceb sv uk vi war zh ru af ast az bg zh-min-nan bn be ca cs cy da et el eo eu fa gl ko hi hr id he ka la lv lt hu mk ms min no nn ce uz kk ro simple sk sl sr sh fi ta tt th tg azb tr ur zh-yue hy my ace als am an hyw ban bjn map-bms ba be-tarask bcl bpy bar bs br cv nv eml hif fo fy ga gd gu hak ha hsb io ig ilo ia ie os is jv kn ht ku ckb ky mrj lb lij li lmo mai mg ml zh-classical mr xmf mzn cdo mn nap new ne frr oc mhr or as pa pnb ps pms nds crh qu sa sah sco sq scn si sd szl su sw tl shn te bug vec vo wa wuu yi yo diq bat-smg zu lad kbd ang smn ab roa-rup frp arc gn av ay bh bi bo bxr cbk-zam co za dag ary se pdc dv dsb myv ext fur gv gag inh ki glk gan guw xal haw rw kbp pam csb kw km kv koi kg gom ks gcr lo lbe ltg lez nia ln jbo lg mt mi tw mwl mdf mnw nqo fj nah na nds-nl nrm nov om pi pag pap pfl pcd krc kaa ksh rm rue sm sat sc trv stq nso sn cu so srn kab roa-tara tet tpi to chr tum tk tyv udm ug vep fiu-vro vls wo xh zea ty ak bm ch ny ee ff got iu ik kl mad cr pih ami pwn pnt dz rmy rn sg st tn ss ti din chy ts kcg ve
Portal di Ensiklopedia Dunia