Robert 边缘检测算子

#include "math.h"
// Robert算子
/*
-----------
| N2 | N3 |
-----------
| N0 | N1 |
-----------
计算公式
        ___________________
       /              2                    2
      / (N0 - N3)   +  (N1 - N2)
  ///

*/
void Robert(BYTE* image0, BYTE* image1, unsigned int w, unsigned int h)
{
 int x, y, aR, aG, aB, a;
 long n;
 for(y = 0; y < h -1; ++y)
 {
  for(x = 0; x < w -1; ++x)
  {
   n = (y * w + x) * 4;

   aR = sqrt((double)((image0[n] - image0[n - w * 4 + 4]) * (image0[n] -image0[n - w * 4 + 4]) +
                          (image0[n + 4] - image0[n - w * 4]) * (image0[n + 4] - image0[n - w * 4])));

   aG = sqrt((double)((image0[n + 1] - image0[n - w * 4 + 4 + 1]) * (image0[n + 1] -image0[n - w * 4 + 4 + 1]) +
                          (image0[n + 4 + 1] - image0[n - w * 4 + 1]) * (image0[n + 4 + 1] - image0[n - w * 4 + 1])));

   aB = sqrt((double)((image0[n + 2] - image0[n - w * 4 + 4 + 2]) * (image0[n + 2] -image0[n - w * 4 + 4 + 2]) +
                          (image0[n + 4 + 2] - image0[n - w * 4 + 2]) * (image0[n + 4 + 2] - image0[n - w * 4 + 2])));

   a = aR + aG + aB;

   a = a>255?255:a;
   //生成边缘扫描结果
   SetPixel(image1,n,a);
  }
 }
}

原图:

 

 

Robert 边缘算子检测图:

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值