我開發Android上的一個項目,這需要我篩選多達5米不同的顏色 - 包括背景色(約計白色)。我不能使用高級數學算法,因爲我不知道太多的數學(我會完全迷失方向),但是通過一些簡單的邏輯算法,我通過反覆試驗得出了一些邏輯算法,部分是邏輯的,我已經能夠結果可以達到70%。但我需要關於如何使其100%工作的建議。需要有關調色板顏色量化:JAVA - Android電子
爲了測試這個算法,我在普通的白色(第5色)紙上用4種不同顏色的筆在隨機的單詞/字母上塗寫,並且編寫了一些代碼來解碼顏色。因此,在代碼中的算法...
- 如果紅色筆墨像素進行解碼,像素被設置爲數字紅色
- 如果藍色筆墨像素進行解碼,像素被設置爲數字藍色
- 如果綠色筆墨水像素被解碼時,像素被設定爲數字綠色
- 如果黑筆墨水像素被解碼時,像素被設定爲數字黃色
的黑色墨水像素被設定爲數字黃色(不黑,因爲黑色很難區分墨水黑色視覺)。
我的代碼如下,但首先這裏是我有的最好的結果之一。正如您所看到的,在黑色(用數字黃色表示)和紅色(用數字紅色表示)之間的邊緣會有重疊。就像我說的我的代碼是部分邏輯的部分試錯。
我的第一個問題是,我怎麼能改善這個算法,以便解碼/過濾器完美的顏色(我選擇了這種方法,因爲我得到非常複雜的數學失去了速度非常快)?
其次我怎樣才能使它適用於不同的色調(白光, 黃色光......)?
編輯:在進一步的評論和討論,我已經意識到,幫助我需要的是調色板顏色量化的Adroid Java代碼例子,由於
if( (Blue > Green) &&(Red > Blue) && (Red - Green) > 25)
copyOfBM.setPixel(x, y, Color.RED); //red
else if( (Blue > Red) && ((Blue > Green)))
copyOfBM.setPixel(x, y, Color.BLUE);
else if((Green >= 82) && ((Green - Blue) >= 12) &&
((DecodeLuminaceColor(x, y, copyOfBM)>= 82) &&
(DecodeLuminaceColor(x, y, copyOfBM)< 124)) )
copyOfBM.setPixel(x, y, Color.GREEN);
else if(((Red - Green) > 6) &&((Red - Green) < 17) &&((Green - Blue) < 8)
&& (DecodeLuminaceColor(x, y, copyOfBM)< 118))
copyOfBM.setPixel(x, y, Color.YELLOW);
void DecodeLuminaceColor(int _x, int _y, Bitmap cBM ){
float avrLum = 0;
Red = 0; Green = 0; Blue = 0; //Color.green(green_encoded_color);
red_encoded_color = cBM.getPixel(_x, _y);
green_encoded_color = cBM.getPixel(_x, _y);
blue_encoded_color = cBM.getPixel(_x, _y);
Red = ((red_encoded_color >> 16) & 0xff);
Green = ((green_encoded_color >> 8) & 0xff);
Blue = ((blue_encoded_color >> 0) & 0xff);
}
「我選擇了這種方法,因爲我非常快速地輸了很複雜的數學。」我的數學比我想要的要少,但是有一些任務,整數算術只會產生近似的答案;這可能就是其中之一。 – msw
我想知道'100%完美'解決方案是什麼樣子。當然,圖像的固有模糊性意味着對於某些像素,顏色無法準確確定?就此而言,迄今爲止的結果並不糟糕。 – usr2564301
除了重疊解碼的結果之外,上面的代碼還有很多硬編碼(紅色像素會導致黑色的誤解碼),這就是爲什麼我認爲應該有更好的解決方案,你知道任何複雜的方法那會產生更準確的解決方案?如果願意,請分享,謝謝 – user4666