2016-02-02 63 views
-4

我有以下代碼:如何讓下面的代碼差值

Double[] colorED = new Double[75]; 
Double[,] ColorEd = new Double[10, 10]; 
for (int i2 = 0; i2 < (colorfeature3.Count())/color_no; i2++) 
    { 
     int cj = 0; 
     for (int i3 = 0; i3 < 10; i3++) 
    { 
ColorEd[ci,cj]= (Math.Abs(colorfeature3[i2 * color_no + i3].GetHue()- colorarray[i3].GetHue()) + Math.Abs(colorfeature3[i2 * color_no + i3].GetSaturation() - colorarray[i3].GetSaturation()) +Math.Abs (colorfeature3[i2 * color_no + i3].GetBrightness() - colorarray[i3].GetBrightness())); 
    } 
    } 

我要的是得到colorarray的元素中的每一個之間的差值(包含10元)和10 colorfeature3的元素(該數組包含750個元素,每個10元素與其他元素相互獨立,因爲它表示數據集中圖像的一個特徵)並將差異值保存爲10 * 10數組,然後獲取每行的最小值並將其保存到列表

任何人都可以提供幫助嗎?

+1

是什麼* *最近意思?這是一個RGB色彩空間嗎? – pid

+3

向我們顯示您的代碼以及您的失敗位置,所以我們可以幫助 – Marco

+2

請查看[StackOverflow準則,詢問一個好問題](http://stackoverflow.com/help/how-to-ask)。 –

回答

1

首先您需要定義「最接近的顏色」的含義。以下是可能有用的答案:Find nearest RGB value using color palette array in C

public int Closeness(int c1, int c2) 
{ 
    // Example algorithm 
    int r1 = c1/0x010000 - c2/0x010000; 
    int g1 = (c1 % 0x010000)/0x00100 - (c2 % 0x010000)/0x00100; 
    int b1 = c1 % 0x000100 - c2 % 0x000100; 
    return r1 * r1 + g1 * g1 + b1 * b1; 
} 

其次,你需要創建一個使用這種「親近」算法來找到你的主顏色列表中最接近的顏色的排序功能。

public int FindClosestIndex(List<int> master, int color) 
{ 
    var idx = -1; 
    var idxCloseness = int.MaxValue; 
    for (var i = 0; i < master.Count; i++) 
    { 
     var closeness = Closeness(master[i], color); 
     if (closeness < idxCloseness) 
     { 
      idx = i; 
      idxCloseness = closeness; 
     } 
    } 
    return idxCloseness; 
} 

public int SortColorByMasterList(List<int> masterOrder, int a, int b) 
{ 
    return FindClosestIndex(masterOrder, a).CompareTo(FindClosestIndex(masterOrder, b)); 
} 

你使用它是這樣的:

myList.Sort((a,b) => SortColorByMasterList(masterOrder, a, b)); 
+0

謝謝您的回答,但請執行我什麼值需要0x000100請您解釋請 –

+0

我幾乎從我鏈接到的其他帖子複製,但想法是隻返回單個顏色(紅色,綠色和藍色)從十六進制顏色。要獲得紅色,您只需要前兩位數字(0x ## 0000),因此我們刪除最後4位數字(顏色/ 0x0010000)。藍色需要剝離紅色,所以我們模(顏色%0x1000),然後通過除以0x100去除綠色。等等。你的顏色可能不是整數,你在問題本身中沒有指定太多。 – bradlis7

+0

對不起,我忘了提及我使用rgb顏色系統,它們的值是整數感謝您的幫助 –