上阈值—面积曲线的拟合与最佳阈值选取

2024-02-18  本文已影响0人  大龙10

书名:数字图像处理实战
作者:杨坦 张良均
出版社:人民邮电出版社有限公司
出版时间:2023-11-01
ISBN:9787115623850


第9章 钢轨表面缺陷检测

9.4 基于区域生长算法的钢轨表面缺陷检测

9.4.2 上阈值的自适应选择

3.上阈值—面积曲线的拟合与最佳阈值选取
#定义带参数的sigmoid函数
def sigmoid(x,a,b,c,d):
  y=a+1/(b+np.exp(c-d*x))
  return y

x_data = np.arange(len(data))
y_data = data
curve =op.curve_fit(sigmoid,x_data,y_data, bounds=([-5,00,-1],[5,0.1,20,1]))
#使用op.curve fit函数估计sigmoid函数的参数
a,b,c,d= curve[0]
x=np.arange(0,len(data),0.1)
y=a+1/(b+np.exp(c-d*x))    # 最终得到的sigmoid函数表达
from scipy.optimize import root,fsolve
# 定义sigmoid函数的导数
def f1(x):
  return(d*np.exp(c-d*x))/(np.exp(c-d*x)+ b)**2

#定义导数与0.1的差值,用于生成方程
def f2(x):
  return f1(x)-0.1

ans_fsolve =fsolve(f2,[25])[0]
print(ans_fsolve)
# 绘制导数的图像
plt.plot(x,y,color='red',label='curve_fit\na={0:.2f} b={1:.2f}\nc={2:.2f}d={3:.2f}'.format(a,b,c,d))
plt.plot(x,f1(x),color='blue',label='F\'(x)')
plt.legend(bbox_to_anchor=(0,1),loc=2,borderaxespad=0)
plt.title('sigmoid:Rail {θ},F\'(x)'.format(picture_label))
plt.savefig('../tmp/'+'sigmoid Rail {o} daoshu.png'.format(picture label),dpi=400)
plt.show()

图9-16 上阈值位置示意图(基于样本rail_1)
def Calculation of threshold(zhongzi, img):
  data = area_of_gray(zhongzi[e],zhongzi[1],img.copy(),yuzhi=70)
  x data =np.arange(len(data))
  y_data = data
  curve = op.curve fit(sigmoid,x data, y data, bounds=([-5,0,0,-1],[5,0.1,20,1]))
  a,b,c,d= curve[0]
  # ans=np.log((2*np.exp(c)+3**(1/2)*np.exp(c))/b)/d
  f1=lambda x:(d*np.exp(c-d*x))/(np.exp(c-d*x)+b)**2-0.1
  ans fsolve =fsolve(f1,[25])[0]
  return ans fsolve

threshold_of_seed =[]
for i in range(len(zhongzi)):
  threshold=Calculation_of_threshold(zhongzi[i],img=imggray4.copy())
  threshold_of_seed .append(threshold)
上一篇 下一篇

猜你喜欢

热点阅读