影像轉換中可以透過"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

arrow
arrow
    文章標籤
    Image Process
    全站熱搜

    Lung-Yu,Tsai 發表在 痞客邦 留言(4) 人氣()