gpt4 book ai didi

c++ - 边缘检测 - 错误检测

转载 作者:搜寻专家 更新时间:2023-10-31 02:16:12 25 4
gpt4 key购买 nike

大家好,谢谢我是一名学生,正在为我的期末项目编写 C++ 代码。我的代码问题是边缘检测算法(图像处理),当我在 MATLAB 中运行边缘检测算法时,我得到了很好的边缘检测,但是如果我运行用 c++ 编写的算法代码,创建的图片检测效果不佳。

我尝试使用 0.03 的阈值使用 Matlb 检测边缘并且检测效果很好(我的项目中的变化非常低(白色表面上的变化很小)。

非常感谢伊丹。

也许有人可以帮助我,这是我的代码:

void ApplySobelFilter(unsigned char src[][NUMBER_OF_COLUMNS], float Threshold)
{
unsigned char dst[NUMBER_OF_ROWS][NUMBER_OF_COLUMNS];
unsigned char * ptrToImage;
ptrToImage = dst[0];
// Kernels for sobel operator
int Kernel_X[3][3] = { { -1, 0, 1 },{ -2, 0, 2 },{ -1, 0, 1 } };
int Kernel_Y[3][3] = { { 1, 2, 1 },{ 0, 0, 0 },{ -1, -2, -1 } };
// clears destination image
for (int pixel = 0; pixel < NUMBER_OF_ROWS*NUMBER_OF_COLUMNS; pixel++)
*ptrToImage++ = 0;

for (int row = 1; row < NUMBER_OF_ROWS - 1; row++)
for (int column = 1; column < NUMBER_OF_COLUMNS - 1; column++)
{

double Gtot = 0;
int Gx = 0;
int Gy = 0;

for (int x = -1; x <= 1; x++)
for (int y = -1; y <= 1; y++)
{
Gx += src[row + y][column + x] * Kernel_X[y + 1][x + 1];
Gy += src[row + y][column + x] * Kernel_Y[y + 1][x + 1];

}

Gtot = sqrt(double(Gx ^ 2 + Gy ^ 2));

if (Gtot >= Threshold)
dst[row][column] = 255;

else
dst[row][column] = 0;

}

for (int row = 0; row < NUMBER_OF_ROWS; row++)
{
for (int col = 0; col < NUMBER_OF_COLUMNS; col++)
{
src[row][col] = dst[row][col];
}
}
}

最佳答案

Gtot = sqrt(double(Gx ^ 2 + Gy ^ 2));

这可能没有达到您的预期。运算符 ^ 计算按位异或,而不是幂。在您的情况下,它只是翻转 Gx 和 Gy 的第二位。可以对变量进行平方,例如像这样:

Gtot = sqrt(double(Gx * Gx + Gy * Gy));

关于c++ - 边缘检测 - 错误检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37253225/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com