由于某些原因,需要计算图像的曲率。找了半天,网上都是曲率滤波的代码,而没有计算图像曲率的代码。于是去找曲率的计算公式,发现公式很简单,所以自己就用python写了一下。
平均曲率的计算公式如下所示
python代码如下所示:
import numpy as np
import cv2
from skimage import color
import matplotlib.pyplot as plt
import imageio
img = cv2.imread("xxx.jpg")
img = color.rgb2gray(img)
x , y = np.gradient(img) #一阶导数
xx, xy = np.gradient(x) #二阶偏导数
yx, yy = np.gradient(y) #二阶偏导数
Iup = (1+x\*x)\*yy - 2\*x\*y\*xy + (1+y\*y)\*xx #公式的分子
Idown = np.power((2\*(1 + x\*x + y\*y)),1.5) #公式的分母
final = Iup/Idown
final=abs(final)
final = (final-final.min())/(final.max()-final.min()) #将结果归一化
final = final * 255 #将像素值扩展为0-255
final = final.astype(np.uint8)
plt.imshow(final)
imageio.write("xxx.jpg",final) #保存图像
写成函数如下所示:
def cal_curvature(img):
x , y = np.gradient(img)
xx, xy = np.gradient(x)
yx, yy = np.gradient(y)
Iup = (1+x\*x)\*yy - 2\*x\*y\*xy + (1+y\*y)\*xx
Idown = np.power((2\*(1 + x\*x + y\*y)),1.5)
final = Iup/Idown
final=abs(final)
final = (final-final.min())/(final.max()-final.min())
final = final * 255
final = final.astype(np.uint8)
return final
转载:https://blog.csdn.net/luxinfeng666/article/details/101475986
查看评论