Barcode recognition, Sobel derivatives and image transformation problem!
First of all, I am developing a program for barcode reading.I use Sobel derivatives to obtain Gradient representation of image in x and y direction for barcode bars.It works very well in both directions(0 to 270 degree).
But unfortunately Sobel derivative representation can not recognize another angle of the image.I don't know how to explain it, but you can understand it by looking at the two different pictures I've added below.
Correctly recognized barcode bars,
Can not detect from the same angle in reverse view,
Here is my code for sobel derivatives , I have added y direction gradient view to x direction using addweighted command.
vector<Sobel_variables> sobel_variables(1);
sobel_variables[0].alpha = 1;
sobel_variables[0].beta = 0.9;
Sobel(gray_image, sobel_variables[0].Gradx, sobel_variables[0].ddepth, 1, 0, 3);
Sobel(gray_image, sobel_variables[0].Grady, sobel_variables[0].ddepth, 0, 1, 3);
subtract(sobel_variables[0].Gradx, sobel_variables[0].Grady, sobel_variables[0].Gradient);
convertScaleAbs(sobel_variables[0].Gradient, sobel_variables[0].Gradient);
subtract(sobel_variables[0].Grady, sobel_variables[0].Gradx, sobel_variables[0].Gradient1);
convertScaleAbs(sobel_variables[0].Gradient1, sobel_variables[0].Gradient1);
addWeighted(sobel_variables[0].Gradient, sobel_variables[0].alpha, sobel_variables[0].Gradient1, sobel_variables[0].beta, 0, sobel_variables[0].Out_Image);
//sobel_variables[0].Out_Image.
imshow("Sobel_operations", sobel_variables[0].Out_Image);
return sobel_variables[0].Out_Image;
It is really strange.Any help will be apreciated to solve this problem.
if you convert the (subtracted)sobel output to CV_8U, all negative values will get saturated to 0
Thank you berak,I really apreciate your effort for my questions.But I think "convertscaleabs" function did almost the same thing that you mentioned.Unfortunately it is not effecting the result of the image.There is still the same problem.Also I changed the x and y order of the sobel function,it is affecting the result but when I solved to x order, y order gets fail and vise versea.
i mean, you should NOT convert it. remove the convertScaleAbs calls.
if you REALLY need a CV_8U image in the end, use normalize() with NORM_MINMAX to do that.
maybe using sobel filters is a bad idea here, because it will make "outlines" of anything. imho, you'd want "ridge detection", not "edge detection" here
I removed this convertScaleAbs as you recommended.Also I solved reverse view problem for sobel derivative with using "add" function after substraction.Should I add it with pictures as an answer? or leave it as it is.
oh, if you'd write your answer, that would be great !
Unfortunately the system does not allow me to write it. "New user" restriction
yea, tomorrow, if you still care ..