gpt4 book ai didi

vision - 如何实现Sobel算子

转载 作者:行者123 更新时间:2023-12-02 06:25:55 25 4
gpt4 key购买 nike

我已经在垂直方向实现了Sobel算子。但我得到的结果很差。我在下面附上了我的代码。

int mask_size= 3;

char mask [3][3]= {{-1,0,1},{-2,0,2},{-1,0,1}};

void sobel(Mat input_image)
{

/**Padding m-1 and n-1 zeroes to the result where m and n are mask_size**/

Mat result=Mat::zeros(input_image.rows+(mask_size - 1) * 2,input_image.cols+(mask_size - 1) * 2,CV_8UC1);
Mat result1=Mat::zeros(result.rows,result.cols,CV_8UC1);
int sum= 0;

/*For loop for copying original values to new padded image **/

for(int i=0;i<input_image.rows;i++)
for(int j=0;j<input_image.cols;j++)
result.at<uchar>(i+(mask_size-1),j+(mask_size-1))=input_image.at<uchar>(i,j);

GaussianBlur( result, result, Size(5,5), 0, 0, BORDER_DEFAULT );
/**For loop to implement the convolution **/

for(int i=0;i<result.rows-(mask_size - 1);i++)
for(int j=0;j<result.cols-(mask_size - 1);j++)
{
int counter=0;
int counterX=0,counterY=0;
sum= 0;
for(int k= i ; k < i + mask_size ; k++)
{
for(int l= j ; l< j + mask_size ; l++)
{
sum+=result.at<uchar>(k,l) * mask[counterX][counterY];
counterY++;
}
counterY=0;
counterX++;
}
result1.at<uchar>(i+mask_size/2,j+mask_size/2)=sum/(mask_size * mask_size);
}

/** Truncating all the extras rows and columns **/

result=Mat::zeros( result1.rows - (mask_size - 1) * 2, result1.cols - (mask_size - 1) * 2,CV_8UC1);
for(int i=0;i<result.rows;i++)
for(int j=0;j<result.cols;j++)
result.at<uchar>(i,j)=result1.at<uchar>(i+(mask_size - 1),j+(mask_size - 1));

imshow("Input",result);
imwrite("output2.tif",result);

}

我对算法的输入是 enter image description here

我的输出是enter image description here

在实际对图像进行卷积之前,我还尝试过使用高斯模糊,得到的输出是 enter image description here

我期望的输出是 enter image description here

我正在使用的指南是:https://www.tutorialspoint.com/dip/sobel_operator.htm

最佳答案

虽然我只是快速浏览了一下,但你的卷积看起来不错。

检查您的输出类型。这是无符号字符。

现在考虑一下,如果您的内核值为负,并且将它们直接存储在 uchar 中是否是一个好主意,那么您的输出像素可能具有的值。

如果你将 -1 存储在一个 unsigned char 中,它会被环绕,你的输出是 255。如果你想知道所有多余的白色东西是从哪里来的。这实际上是小的负梯度。

所需的结果看起来像 Sobel 输出值的绝对值。

关于vision - 如何实现Sobel算子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45582633/

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