Win8 Metro(C#)数字图像处理--2.37Wallis图象锐化



[函数名称]

Wallis图象锐化        WallisSharpen(WriteableBitmap src)

[算法说明]

 Wallis锐化算法是在拉普拉斯算子的基础上,考虑人的视觉特性中包含一个对数环节,因此在锐化时,采用对数处理的方法进行改进,公式如下:

<strong><span style="font-size:14px;">[函数代码]</span></strong>
        /// <summary>
        /// Wallis sharpen process.
        /// </summary>
        /// <param name="src">The source image.</param>
        /// <returns></returns>
        public static WriteableBitmap WallisSharpen(WriteableBitmap src)37Wallis锐化函数 
        {
            if (src != null)
            {
                int w = src.PixelWidth;
                int h = src.PixelHeight;
                WriteableBitmap sharpenImage = new WriteableBitmap(w, h);
                byte[] temp = src.PixelBuffer.ToArray();
                byte[] tempMask = (byte[])temp.Clone();
                double b = 0, g = 0, r = 0, srR = 0, srG = 0, srB = 0;
                for (int j = 1; j < h - 1; j++)
                {
                    for (int i = 4; i < w * 4 - 4; i += 4)
                    {

                        srB = tempMask[i + j * w * 4];
                        srG = tempMask[i + 1 + j * w * 4];
                        srR = tempMask[i + 2 + j * w * 4];
                        b = 46*Math.Abs(5 * Math .Log(srB+1) - Math .Log(tempMask[i - 4 + j * w * 4]+1) - Math .Log(tempMask[i + 4 + j * w * 4]+1) - Math .Log(tempMask[i + (j - 1) * w * 4]+1) - Math .Log(tempMask[i + (j + 1) * w * 4]+1));
                        g = 46*Math.Abs(5 * Math .Log(srG+1) - Math .Log(tempMask[i - 4 + 1 + j * w * 4]+1) - Math .Log(tempMask[i + 4 + 1 + j * w * 4]+1) - Math .Log(tempMask[i + 1 + (j - 1) * w * 4]+1) - Math .Log(tempMask[i + 1 + (j + 1) * w * 4]+1));
                        r = 46*Math.Abs(5 * Math .Log(srR+1) - Math .Log(tempMask[i - 4 + 2 + j * w * 4]+1) - Math .Log(tempMask[i + 4 + 2 + j * w * 4]+1) - Math .Log(tempMask[i + 2 + (j - 1) * w * 4]+1) - Math .Log(tempMask[i + 2 + (j + 1) * w * 4]+1));
                        temp[i + j * w * 4] = (byte)(b > 0 ? (b < 255 ? b : 255) : 0);
                        temp[i + 1 + j * w * 4] = (byte)(g > 0 ? (g < 255 ? g : 255) : 0);
                        temp[i + 2 + j * w * 4] = (byte)(r > 0 ? (r < 255 ? r : 255) : 0);
                        b = 0; g = 0; r = 0; srR = 0; srG = 0; srB = 0;
                    }
                }
                Stream sTemp = sharpenImage.PixelBuffer.AsStream();
                sTemp.Seek(0, SeekOrigin.Begin);
                sTemp.Write(temp, 0, w * 4 * h);
                return sharpenImage;
            }
            else
            {
                return null;
            }
        }
<strong><span style="font-size:14px;">[图象效果]</span></strong>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Trent1985

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值