官术网_书友最值得收藏!

4.4.2 計算模糊距離

編程實現

在類CCluster中添加函數GetFuzzyDistance (),進行有關圖像的模糊距離的計算。具體實現代碼如代碼4-3所示。

代碼4-3 GetFuzzyDistance ()函數

        double CCluster::GetFuzzyDistance(CCluster::Pattern pattern1,CCluster::Pattern pattern2, int distype)
        {
            switch  (distype)
            {
            case 1://歐氏距離
                {
                          double max=0;
                          for (int i=0; i<patternnum-1; i++)
                              for (int j=i+1; j<patternnum; j++)
                                  if (max<GetDistance(m_pattern[i],m_pattern[j],1))
                                      max=GetDistance(m_pattern[i],m_pattern[j],1);
                          return (max-GetDistance(pattern1,pattern2,1))/max;
                }
            case 2://數量積
                {
                    double temp,max;
                    max=0;
                    for (int i=0; i<patternnum-1; i++)
                        for (int j=0; j<patternnum; j++)
                        {
                            temp=0;
                            for (int k=0; k<N*N; k++)
                            {
                                temp+=m_pattern[i].feature[k]*m_pattern[j].feature[k];
                            }
                            if (max<temp)
                                max=temp;
                        }
                    temp=0;
                    for ( i=0; i<N*N; i++)
                    {
                        temp+=pattern1.feature[i]*pattern2.feature[i];
                    }
                    return (temp/max);
                }
            case 3://相關系數
                {
                    double ap1,ap2;
                    ap1=0;ap2=0;
                    for (int i=0; i<N*N; i++)
                    {
                        ap1+=pattern1.feature[i];
                        ap2+=pattern2.feature[i];
                    }
                    ap1/=N;
                    ap1/=N;
                    double a,b1,b2;
                    a=0;b1=0;b2=0;
                    for (i=0; i<N*N; i++)
                    {
                        a+=(pattern1.feature[i]-ap1)*(pattern2.feature[i]-ap2);
                        b1+=(pattern1.feature[i]-ap1)*(pattern1.feature[i]-ap1);
                        b2+=(pattern2.feature[i]-ap2)*(pattern2.feature[i]-ap2);
                    }
                    if (b2*b1!=0)
                        return (a/sqrt(b1*b2));
                }
            case 4://最大最小法
                {
                    double min ,max;
                    min=0; max=0;
                    for (int i=0; i<N*N; i++)
                    {
                        min+=pattern1.feature[i]<pattern2.feature[i]? pattern1.feature[i]:pattern2.feature[i];
                        max+=pattern1.feature[i]<pattern2.feature[i]? pattern2.feature[i]:pattern1.feature[i];
                    }
                    if (max!=0)
                    return (min/max);
                }
            case 5://算數平均法
                {
                    double min ,max;
                    min=0; max=0;
                    for (int i=0; i<N*N; i++)
                    {
                        min+=pattern1.feature[i]<pattern2.feature[i]? pattern1.feature[i]:pattern2.feature[i];
                        max+=pattern1.feature[i]+pattern2.feature[i];
                    }
                    if (max!=0)
                    return (2*min/max);
                }
            case 6://幾何平均最小法
                {
                    double min ,max;
                    min=0; max=0;
                    for (int i=0; i<N*N; i++)
                    {
                        min+=pattern1.feature[i]<pattern2.feature[i]? pattern1.feature[i]:pattern2.feature[i];
                        max+=sqrt(pattern1.feature[i]*pattern2.feature[i]);
                    }
                    if (max!=0)
                    return (min/max);
                }
            default:
                return -1;
            }
        }
主站蜘蛛池模板: 怀来县| 二连浩特市| 磐石市| 郑州市| 阳西县| 江都市| 无为县| 辛集市| 班戈县| 泸溪县| 南平市| 锡林郭勒盟| 本溪| 彭泽县| 安远县| 巍山| 简阳市| 汽车| 永昌县| 班戈县| 牡丹江市| 阿巴嘎旗| 乌恰县| 新乡市| 康保县| 辽中县| 湘阴县| 河间市| 西贡区| 灵石县| 鄄城县| 嵊州市| 广水市| 华容县| 沂水县| 眉山市| 汉中市| 玛曲县| 甘谷县| 合川市| 镇平县|