我需要顏色平衡其中有18%灰色卡的圖像。用戶將該圖像加載到應用程序中,然後單擊灰色卡片。從這裏我需要一個算法來幫助顏色平衡圖像。我發現了一些文章,提到做矩陣變換,我試過了,但沒有成功(圖像洗掉或變成一種顏色或另一種顏色)。我現在的代碼是:如何在C中使用灰色卡進行顏色平衡#
int sampleSize = 20; // The square around the user's click on the gray card
int rVal = 0, gVal = 0, bVal = 0;
int count = 0;
for (int x = 0; x < sampleSize - 1; x++)
{
for (int y = 0; y < sampleSize - 1; y++)
{
System.Drawing.Color c = grayCardArea.GetPixel(x, y);
if (c.R > 0)
{
rVal += c.R;
gVal += c.G;
bVal += c.B;
rs.Add(c.R);
count++;
}
}
}
grayCardGraphics.Dispose();
int rAvg = 0, gAvg = 0, bAvg = 0;
rAvg = (int)Math.Round((decimal)rVal/(count));
gAvg = (int)Math.Round((decimal)gVal/(count));
bAvg = (int)Math.Round((decimal)bVal/(count));
// 117 is a value I found online for the neutral gray color of the gray card
float rDiff = (117/(float)rAvg);
float gDiff = (117/(float)gAvg);
float bDiff = (117/(float)bAvg);
float[][] ptsArray =
{
new float[] {rDiff, 0, 0, 0, 0},
new float[] {0, gDiff, 0, 0, 0},
new float[] {0, 0, bDiff, 0, 0},
new float[] {0, 0, 0, 1, 0},
new float[] {0, 0, 0, .0f, 1}
};
// Create a ColorMatrix
ColorMatrix clrMatrix = new ColorMatrix(ptsArray);
// Create ImageAttributes
ImageAttributes imgAttribs = new ImageAttributes();
// Set color matrix
imgAttribs.SetColorMatrix(clrMatrix, ColorMatrixFlag.Default, ColorAdjustType.Default);
// Draw image with ImageAttributes
outputImageGraphics.DrawImage(srcImage, new System.Drawing.Rectangle(0, 0, srcImage.Width, srcImage.Height),
0, 0, srcImage.Width, srcImage.Height,
GraphicsUnit.Pixel, imgAttribs);
查看outputImage的保存副本顯示圖像的奇怪轉換。
任何幫助,非常感謝!
這些伽瑪校正圖像?如果是這樣,你需要說明這一點。 – Gabe 2010-10-12 18:38:23