#opencv #image-processing #gradient #normals
#opencv #обработка изображений #градиент #нормали
Вопрос:
Мне нужна нормаль (к краю) в каждой точке обнаруженных краев. Я не могу придумать хорошего метода для этого, и моя главная проблема не в этом. Мне нужно, чтобы нормали были согласованными. Я имею в виду, что все они должны быть обращены наружу (или внутрь). Рассмотрим изображение (после обнаружения края)
Поскольку это не образует замкнутую кривую, я не могу определить, внутрь или наружу, но я хочу, чтобы соседние нормали не были противоположны друг другу. Я не уверен, является ли утверждение о том, что смежные нормали должны образовывать острый угол, правильным способом выражения этого условия. Существует ли какой-либо известный алгоритм / библиотека, которая решает эту проблему?
Комментарии:
1. Вы вычислили края по изображению в оттенках серого? Если это так, вы можете использовать cv::Sobel для получения производных и cv::phase для получения угла
2. Использовали ли вы Canny edge detector для получения этого результата? Внутри он использует градиент (который указывает в направлении нормали). Я рекомендую вам ознакомиться с Canny, затем реализовать его самостоятельно или найти реализацию, которую вы можете изменить, и получить из нее необходимые данные.
3. Спасибо, что указали мне правильное направление. Я посмотрю это!