影像轉換中可以透過"Log Transform" 或 "Power – law" 將較為不明顯的資訊強化出來,其曲線圖如下所示。
由此可見Log對於較為陰暗的影像有較敏感的轉換能力,因此當影像有部分地方較為黑暗需強化其訊號可以選用"Log Transform"將其強化。
其轉換數學式如下,其中C為放大倍數的常數。
𝑓(𝑥)= 𝑐 ∗ log〖(𝑥+1)〗
實驗結果如下圖。由實驗可發現本來較為灰暗的影像經過Log轉換(C=100) 後,影像較為清晰更加容易識別。
C#
private static Bitmap log(Bitmap bitmap, int c)
{
int width = bitmap.Width;
int height = bitmap.Height;
System.IntPtr srcScan, dstScan;
BitmapData srcBmData, dstBmData;
Bitmap dstBitmap = ImageExtract.InitPonitMethod(bitmap, width, height, out srcScan, out dstScan, out srcBmData, out dstBmData);
unsafe //啟動不安全代碼
{
byte* srcP = (byte*)srcScan;
byte* dstP = (byte*)dstScan;
int srcOffset = srcBmData.Stride - width * 3;
int dstOffset = dstBmData.Stride - width * 3;
for (int y = 0; y < height; y++)
{
for (int x = 0; x < width; x++, srcP += 3, dstP += 3)
{
*dstP = (byte)(c * Math.Log(srcP[0] + 1, 10));
*(dstP + 1) = (byte)(c * Math.Log(srcP[1] + 1, 10));
*(dstP + 2) = (byte)(c * Math.Log(srcP[2] + 1, 10));
}
srcP += srcOffset;
dstP += dstOffset;
}
}
bitmap.UnlockBits(srcBmData);
dstBitmap.UnlockBits(dstBmData);
return dstBitmap;
}
完整程式碼 : https://github.com/Lung-Yu/ImageToolBox/blob/master/ImageProcessToolBox/TransformByLog.cs
文章標籤
全站熱搜