这里增加了对边缘像素的补齐。sobel梯度分割抗噪性好,但是无法做到自动阈值,是其一大遗憾,matlab却解决的很好。
//默认对8位位图进行处理
void Sobel(unsigned char *pIn, int width, int height, unsigned char *pOut)
{
//每行像素所占字节数,输出图像与输入图像相同
int lineByte=(width+3)/4*4;
//申请输出图像缓冲区
pOut=new unsigned char[lineByte*height];
//循环变量,图像的坐标
int i,j;
//中间变量
int x, y, t;
//Sobel算子
for(i=1;i<height-1;i++)
{
for(j=1;j<width-1;j++)
{
//x方向梯度
x= *(pIn+(i-1)*lineByte+j+1)
+ 2 * *(pIn+i*lineByte+j+1)
+ *(pIn+(i+1)*lineByte+j+1)
- *(pIn+(i-1)*lineByte+j-1)
- 2 * *(pIn+i*lineByte+j-1)
- *(pIn+(i+1)*lineByte+j-1);
//y方向梯度
y= *(pIn+(i-1)*lineByte+j-1)
+ 2 * *(pIn+(i-1)*lineByte+j)
+ *(pIn+(i