图像锐化算法Laplacian

目录

  • 一、锐化定义
  • 二、Laplacian算法
  • 三、实验效果

一、锐化定义

图像锐化是使图像边缘更加清晰的一种图像处理方法。常用的做法是提取图像的高频分量,将其叠加到原图上。
图像高频分量的提取有两种做法:一种是用高通滤波器得到高频分量;另一种是用低通滤波器得到低频,然后用原图减去低频得到高频。
直接提取高频的方法有sobel算法、laplcian算子,sobel算子是图像的一阶导数,提取的是梯度信息,分水平和垂直两种,常常用来做边缘检测、方向判别,sobel算子在斜坡处不为0,因此会产生较粗的边缘。laplcian算子是图像的二阶导,在图像开始变化和结束变化的地方值不为0,渐变时结果为0,因此laplacian比sobel算子更适合做sharpen。
我们这里使用Laplacian算子进行锐化。

二、Laplacian算法

以自身灰度值的9倍减去周围像素点灰度值作为自身新的灰度值。可见,如果一片暗区出现了一个亮点,那么锐化处理的结果是这个亮点变得更亮,增加了图象的噪声。因为图象中的边缘就是那些灰度发生跳变的区域,所以锐化模板在边缘检测中很有用。

图像锐化算法Laplacian_第1张图片

private void But_sharpen_Click(object sender, EventArgs e)
        {
            if (pictureBox1.Image == null)
            {
                MessageBox.Show("错误,没有导入图片!");
                return;
            }
            bt1 = new Bitmap(pictureBox1.Image);
            bt2 = new Bitmap(pictureBox1.Image);
            int R1, R2, R3, R4, R5, R6, R7, R8, R9, R;
            int G1, G2, G3, G4, G5, G6, G7, G8, G9, G;
            int B1, B2, B3, B4, B5, B6, B7, B8, B9, B;
            for (int i = 1; i < bt1.Width - 1; i++)
            {
                for (int j = 1; j < bt1.Height - 1; j++)
                {
                    R1 = bt1.GetPixel(i - 1, j - 1).R;
                    R2 = bt1.GetPixel(i - 1, j).R;
                    R3 = bt1.GetPixel(i - 1, j + 1).R;
                    R4 = bt1.GetPixel(i, j - 1).R;
                    R5 = bt1.GetPixel(i, j).R;
                    R6 = bt1.GetPixel(i, j + 1).R;
                    R7 = bt1.GetPixel(i + 1, j - 1).R;
                    R8 = bt1.GetPixel(i + 1, j).R;
                    R9 = bt1.GetPixel(i + 1, j + 1).R;
                    R = Math.Abs(R5*9-R1-R2-R3-R4-R6-R7-R8-R9);
                    G1 = bt1.GetPixel(i - 1, j - 1).G;
                    G2 = bt1.GetPixel(i - 1, j).G;
                    G3 = bt1.GetPixel(i - 1, j + 1).G;
                    G4 = bt1.GetPixel(i, j - 1).G;
                    G5 = bt1.GetPixel(i, j).G;
                    G6 = bt1.GetPixel(i, j + 1).G;
                    G7 = bt1.GetPixel(i + 1, j - 1).G;
                    G8 = bt1.GetPixel(i + 1, j).G;
                    G9 = bt1.GetPixel(i + 1, j + 1).G;
                    G = Math.Abs(G5*9-G1-G2-G3-G4-G6-G7-G8-G9);
                    B1 = bt1.GetPixel(i - 1, j - 1).B;
                    B2 = bt1.GetPixel(i - 1, j).B;
                    B3 = bt1.GetPixel(i - 1, j + 1).B;
                    B4 = bt1.GetPixel(i, j - 1).B;
                    B5 = bt1.GetPixel(i, j).B;
                    B6 = bt1.GetPixel(i, j + 1).B;
                    B7 = bt1.GetPixel(i + 1, j - 1).B;
                    B8 = bt1.GetPixel(i + 1, j).B;
                    B9 = bt1.GetPixel(i + 1, j + 1).B;
                    B = Math.Abs(B5*9-B1-B2-B3-B4-B6-B7-B8-B9);
                    if (R >= 255) R = 255;
                    if (G >= 255) G = 255;//判断是否超出各分量允许的范围,如果大于255则只能等于255
                    if (B >= 255) B = 255;
                    bt2.SetPixel(i, j, Color.FromArgb(R, G, B));
                }
                pictureBox2.Refresh();
                pictureBox2.Image = bt2;
            }
        }

三、实验效果

图像锐化算法Laplacian_第2张图片
图像锐化算法Laplacian_第3张图片

你可能感兴趣的:(算法,图像处理,计算机视觉)