图像边缘检测-Roberts交叉算子

Roberts交叉算子程序实例
from PIL import Image, ImageFont
import numpy as np
import matplotlib.pyplot as pyplot
import pylab
im =Image.open(‘Bikesgray.jpg’)#记得要用灰度图,如果是彩色图需要转换成灰度图
im=im.convert(‘L’)
pyplot.imshow(im, cmap=pyplot.cm.gray)#输出图片可能颜色有问题,用cmap=pyplot.cm.gray进行改颜色还有方向问题,也可以通过调整
pylab.show()
x=np.array([[1,0],[0,-1]])
y=np.array([[1,0],[0,-1]])
w,h = im.size
res = np.zeros((w, h))#取一个和原图一样大小的图片,并在里面填充0
for x in range(w-1):
for y in range(h-1):
sub =[[im.getpixel((x, y)), im.getpixel((x, y+1))],[im.getpixel((x+1, y)), im.getpixel((x+1, y+1))]]#x,y代表像素的位置,而不是像素值,要从图片上得到像素值
sub = np.array(sub)#在python标准中list是不能做乘法,所以np.array()把list转就可以相乘
roberts_x = x
roberts_y = y
var_x =sum(sum(sub * roberts_x))#矩阵相乘,查看公式,我们要得到是一个值,所以对它进行两次相加
var_y = sum(sum(sub * roberts_y))
var = abs(var_x) + abs(var_y)
if var>150000:###设置阈值
var=225
else:
var=0
res[x][y] = var#把var值放在x行y列位置上

pyplot.imshow(res, cmap=pyplot.cm.gray)#输出图片可能颜色有问题,用cmap=pyplot.cm.gray进行改颜色还有方向问题,也可以通过调整
pylab.show()
图像边缘检测-Roberts交叉算子_第1张图片

你可能感兴趣的:(图像边缘检测-Roberts交叉算子)