ソベル演算子を垂直方向に実装しました。しかし、私が得ている結果は非常に貧しいです。私は以下のコードを添付しています。アルゴリズムへSobel演算子の実装方法
int mask_size= 3;
char mask [3][3]= {{-1,0,1},{-2,0,2},{-1,0,1}};
ボイドソーベル(マット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);
}
ありますユアンガウスブルーウル実際に画像や私が得た出力を畳み込む前に、私は期待してい
ガイドがあるされている:私は持っていたもののhttps://www.tutorialspoint.com/dip/sobel_operator.htm
正直言って、それは私にはうまく見えます。 Sobelを実行する前に、画像にガウスぼかしを適用してみてください。それは不安のいくつかを滑らかにするはずです。 – ljetibo
ガウスぼかしで試してみましたが、うまくいきませんでした。次回は出力が – Abhishek
の上にハイライト表示されますので、時間をかけてコードをイメージとしてではなくコードとして入力して、他の人がコピーできるようにしてください。 – Piglet