如何在python中获取最大和最小结果值skfuzzy?

问题描述

我在openCV python中编写了一个代码,可以检测手套的缺陷(撕裂,脏污)并测量其面积。然后,我应用模糊逻辑代码来获得其质量(0-100%)。输入的是缺陷的数量和缺陷的面积,然后根据这些模糊信息映射手套的质量。

现在, number of defects = 0area of defect = 0,这意味着手套还可以,质量必须为100%,但我得到了83.33%。同样,当缺陷的数量和面积最大时,我得到的是16.66%而不是0%。

如何在模糊逻辑中获得这些边界值,甚至有可能吗?

import numpy as np
import skfuzzy as fuzz
from skfuzzy import control as ctrl
import matplotlib.pyplot as plt

defects = ctrl.Antecedent(np.arange(0,6,1),'defects')
area = ctrl.Antecedent(np.arange(0,21,'Area')
quality = ctrl.Consequent(np.arange(0,101,'Quality')

defects['few'] = fuzz.trimf(defects.universe,[0,3])
defects['some'] = fuzz.trimf(defects.universe,3,5])
defects['many'] = fuzz.trimf(defects.universe,[3,5,6])

area['less'] = fuzz.trimf(area.universe,10])
area['medium'] = fuzz.trimf(area.universe,10,20])
area['great'] = fuzz.trimf(area.universe,[10,20,21])

quality['low'] = fuzz.trimf(quality.universe,50])
quality['medium'] = fuzz.trimf(quality.universe,50,100])
quality['high'] = fuzz.trimf(quality.universe,[50,100,101])

rule1 = ctrl.Rule(defects['few'] & area['less'],quality['high'])
rule2 = ctrl.Rule(defects['few'] & area['medium'],quality['high'])
rule3 = ctrl.Rule(defects['few'] & area['great'],quality['medium'])
rule4 = ctrl.Rule(defects['some'] & area['less'],quality['medium'])
rule5 = ctrl.Rule(defects['some'] & area['medium'],quality['medium'])
rule6 = ctrl.Rule(defects['some'] & area['great'],quality['low'])
rule7 = ctrl.Rule(defects['many'] & area['less'],quality['low'])
rule8 = ctrl.Rule(defects['many'] & area['medium'],quality['low'])
rule9 = ctrl.Rule(defects['many'] & area['great'],quality['low'])

percentage_ctrl = ctrl.ControlSystem([rule1,rule2,rule3,rule4,rule5,rule6,rule7,rule8,rule9])
percentage = ctrl.ControlSystemSimulation(percentage_ctrl)

percentage.input['defects'] = 0
percentage.input['Area'] = 0

percentage.compute()
print(percentage.output['Quality'])

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)