python计算图像的曲率

由于某些原因,需要计算图像的曲率。找了半天,网上都是曲率滤波的代码,而没有计算图像曲率的代码。于是去找曲率的计算公式,发现公式很简单,所以自己就用python写了一下。
平均曲率的计算公式如下所示
python计算图像的曲率_第1张图片
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

你可能感兴趣的:(学习笔记,图像曲率,二阶导数,图像处理,图像二阶特征,图像特征)