Я использую оператор sobel для обнаружения краев в изображении в градациях серого с помощью EmguCV 3.0 (.NET Wrapper для OpenCV).OpenCV: Sobel фильтр не вращается инвариант
кода я использую
Image<Gray, byte> gray = new Image<Gray, byte>(@"C:\gray.bmp");
Image<Gray, float> sobel = gray.Sobel(0, 1, 3).Add(gray.Sobel(1, 0, 3)).AbsDiff(new Gray(0.0));
Это препроцессированное изображение (серое)
И это то, что я выберусь (Собел)
Как вы можете видеть, края в правом верхнем и нижнем левом углу очень слабы. Сначала я подумал, что это могло бы иметь какое-то отношение к исходному изображению, поэтому я повернул его на 180 градусов и снова запустил фильтр. Результат по-прежнему имеет очень слабые края в правом верхнем и нижнем левом углу (к сожалению, мне не разрешено размещать здесь более двух ссылок, поэтому я не могу показать это вам).
Так что мой вопрос: это ошибка, или я использую фильтр sobel неправильно? Должна ли она быть инвариантной по отношению к вращению, когда она проходила в двух измерениях? И как я могу это исправить, чтобы увидеть эти два края так же сильно, как другие?
Оператор sobel-оператора, нанесенный на повернутое изображение: http://i.stack.imgur.com/U7QCF.jpg (все еще слабый края в правом верхнем и нижнем левом углу) – derjan
Почему бы не создать собственный фильтр? http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/filter_2d/filter_2d.html – William