2014-03-24 75 views
0

我有以下代碼:Java - 這段代碼的解釋是什麼?

for (int i = 0; i < height1; i++) { 
    for (int j = 0; j < width1; j++) { 
    int rgb1 = img1.getRGB(i, j); 
    int rgb2 = img2.getRGB(i, j); 
    int r1 = (rgb1 >> 16) & 0xff; 
    int g1 = (rgb1 >> 8) & 0xff; 
    int b1 = (rgb1  ) & 0xff; 
    int r2 = (rgb2 >> 16) & 0xff; 
    int g2 = (rgb2 >> 8) & 0xff; 
    int b2 = (rgb2  ) & 0xff; 
    diff += Math.abs(r1 - r2); 
    diff += Math.abs(g1 - g2); 
    diff += Math.abs(b1 - b2); 
    } 
} 
double n = width1 * height1 * 3; 
double p = diff/n/255.0; 
System.out.println("diff percent: " + (p * 100.0)); 

的代碼是用來尋找圖像之間的差異百分比,但我不知道爲什麼百分比由「N」和「255.0」

謝謝

+0

這是關於數學的更多內容。您有n個像素,每個像素可以更改爲255.因此,現在您要將其轉換爲1到100之間的數字。 –

回答

1

每個像素由3種顏色成分的:

  • 的R - 紅色分量
  • ģ - 綠色成分
  • 乙 - 藍色分量

每這些顏色分量被表示爲一個字節 - 即8位。可以用一個字節表示的最大值爲255

因此,爲了計算百分比的差異,你計算的所有像素的所有顏色分量的差異的總和,平分這筆錢...

  • 由像素的數目,通過3,以獲得每個像素
  • 平均差,
  • 通過255以獲得每個顏色分量的平均差值,以獲得0.0和1.0之間的值,其可以被轉化成百分比值
0

n次255是可能的最大差異。也就是說,如果所有顏色的差異是255. diff是實際的差異。要獲得百分比,你必須劃分實際總用100.0ml

乘以以下的方法是正確的:

diff/n/255 = diff/(n * 255) 
1

問自己,如果它沒有什麼會happend? 它只取決於百分比,單位的百分比? RGB每個像素的單位? 關於255,每種顏色有一個字節:所以8位,2的冪是256,意味着每個顏色分量0到255 = 256個可能性。

0

它爲24位顏色深度和圖片大小提供標準化目的。循環中的迭代將正好運行n/3次,並且在每次迭代中差異將增加3個數字,範圍[0-255]。

0

它看起來像差異變量保存圖像的所有像素(寬度*高度)的所有顏色(紅色+綠色+藍色)差異的總和。

所以:

double n = width1 * height1 * 3; 

持有多少次,你添加的每一個像素差異的顏色差異的信息。 RGB的顏色值介於0和255之間。

p變量的範圍是0和1之間,所以你必須用n來劃分diff和255

然後輸出你只是乘以100 p來得到的百分比。