利用Roberts进行边缘检测的代码

    vc图像处理程序中经常要用到边缘检测,常用的边缘检测方法有Roberts算子, Prewitt算子, Sobel算子, Canny算子等。
    以下代码实现了最简单的Roberts算子边缘检测,输入为width*height的灰度图,存放在矩阵src中,输出也为width*height的灰度图(象素取值在0-255之间),存放在矩阵dst中。


void Roberts(BYTE *dst,BYTE *src,int width,int height)
{
    int A, B;    // A(x-1, y-1) B(x, y-1)
    int C, D;    // C(x-1, y) D(x, y)
    int x;
    int y;

    for (x = 0; x < width; x++)
    {
        *dst = 0;
        dst++;
    }

    // 指向第一行
    src += width;

    // 不处理最上边和最左边
    for (y = 1; y < height; y++)
    {
        // 指向每行第一列
        *dst = 0;

        src++;
        dst++;
        for (x = 1; x < width; x++)
        {
            A = *(src - width - 1);
            B = *(src - width);
            C = *(src - 1);
            D = *src;

            int temp = (int)(sqrt((A - D) * (A - D) + (B - C) * (B - C)));

            // 越界判断 0 -- 255
            if(temp >= 255)
            {
                *dst = 255;
            }
            else
            {
                *dst = (BYTE)temp;
            }

            src++;
            dst++;
        } // x
    } // y

    return;
} // end of Roberts


[本日志由 cnfgg 于 2009-06-30 04:40 PM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: Roberts 边缘检测 vc 代码
相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.