Python实现索伯尔算子[通俗易懂]
Python 实现 通俗易懂 算子
2023-06-13 09:12:31 时间
大家好,又见面了,我是你们的朋友全栈君。
Python实现索伯尔算子
最近在学习Python,正好用sobel算子练练手,将就看看吧 先放原图
用Opencv中sobel算子做一下对比:
# OpenCV
ori_img = cv.imread("C:\\Users\\BLYX\\Desktop\\test\\temple1.jpg")
x = cv.Sobel(ori_img[:, :, 0], cv.CV_16S, 1, 0)
y = cv.Sobel(ori_img[:, :, 0], cv.CV_16S, 0, 1)
absX = cv.convertScaleAbs(x)
absY = cv.convertScaleAbs(y)
dst = cv.addWeighted(absX, 0.5, absY, 0.5, 0)
cv.imshow("OpenCV's Result", dst)
cv.waitKey(0)
cv.destroyAllWindows()
结果图如下
然后用自己写的sobel实现如下:
# self—design
def convertu8(num):
if num > 255 or num < -255:
return 255
elif -255 <= num <= 255:
if abs(num - int(num)) < 0.5:
return np.uint8(abs(num))
else:
return np.uint8(abs(num)) + 1
def sobel(img, k=0):
row = img.shape[0]
col = img.shape[1]
image = np.zeros((row, col), np.uint8)
s = time.time()
for i in range(1, row - 1):
for j in range(1, col - 1):
y = int(img[i - 1, j + 1, k]) - int(img[i - 1, j - 1, k]) + 2 * (
int(img[i, j + 1, k]) - int(img[i, j - 1, k])) + int(img[i + 1, j + 1, k]) - int(
img[i + 1, j - 1, k])
x = int(img[i + 1, j - 1, k]) - int(img[i - 1, j - 1, k]) + 2 * (
int(img[i + 1, j, k]) - int(img[i - 1, j, k])) + int(img[i + 1, j + 1, k]) - int(
img[i - 1, j + 1, k])
image[i, j] = convertu8(abs(x) * 0.5 + abs(y) * 0.5)
e = time.time()
print(e - s)
return image
if __name__ == '__main__':
ori_img = cv.imread("C:\\Users\\BLYX\\Desktop\\test\\temple1.jpg")
sobelimage = sobel(ori_img, 0)
cv.imshow("my Result", sobelimage)
cv.waitKey(0)
cv.destroyAllWindows()
结果图如下
然后用ENVI比对了一下:
***blablablabla 可以看到三幅图相对比,第二幅图的视觉效果更好,当然不同的图片可能会对最终的结果产生影响。但经多组图片测试,可以得到在对水平锐化和垂直锐化图像赋予相同的权重叠合时,第二幅结果图在视觉上稍微优于OpenCV中的sobel,而在处理效率上却要低上很多。希望未来能够改进一下。 写得不好,还望大家指正!
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/158981.html原文链接:https://javaforall.cn
相关文章
- python实现矩阵的转置_Python实现矩阵转置的方法分析
- python程序的热部署实现[通俗易懂]
- CPD 算法实现点云配准(python版本)[通俗易懂]
- python一行实现局域网内传输文件[通俗易懂]
- Python中通过PyPDF2实现PDF加密[通俗易懂]
- 【Python】python文件打开方式详解——a、a+、r+、w+、rb、rt区别[通俗易懂]
- Python元组_python输出元组
- 【说站】python上下文管理器如何实现类
- 遗传算法的应用实例python实现_遗传算法Python解决一个问题
- python程序化交易实例-用 Python 实现你的量化交易策略「建议收藏」
- python数字转字符串固定位数_python-将String转换为64位整数映射字符以自定…「建议收藏」
- 盘点一个Python列表(元素多样)处理的实战题目(使用正则表达式也可以实现)
- 用python实现网表分模块统计面积
- 【7】python_matplotlib 输出(保存)矢量图方法;画图时图例说明(legend)放到图像外侧;Python_matplotlib图例放在外侧保存时显示不完整问题解决
- Python操作Redis实现数据持久化(python操作redis)
- Python与MySQL实现数据分析的完美组合(mysql中python)
- Python代理抓取并验证使用多线程实现