#r #raster #sf #r-stars
Вопрос:
У меня есть растровый объект stars под названием raster
. Я пытаюсь запустить обнаружение границ на нем, как:
image(rot90c(edge.detect(raster[[1]], thresh1=1, thresh2=80, noise="gaussian", noise.s=3, method="Canny")))
Это работает нормально, но когда я пытаюсь обрезать растр по объекту sf other_object
с помощью:
image(rot90c(edge.detect(st_crop(raster,other_object)[[1]], thresh1=1, thresh2=80, noise="gaussian", noise.s=3, method="Canny")))
Я получаю ошибки из-за NAs. Есть ли способ создать обрезанный растр таким образом, чтобы метод определения границ не выдавал ошибку из-за отсутствия областей на изображении?
Комментарии:
1. Я думаю, я бы спросил, если вы растеризуете, обрезаете , а затем edge.detect
other_object
, имеет ли значение thresh2 все еще смысл, или, возможно, оно должно быть меньше по сравнению с обрезкой, которая происходит при вашем ошибочном вызове? Это действительно функция того, что происходит, оwvtool
присутствии которого в наборе проблем, вероятно, стоит упомянуть.2. Спасибо вам за ваш ответ! Я не думаю, что это имеет такое большое отношение к порогу, как исключение, возникающее при работе со значениями NA… обрезка в основном вводит значения NA в растр, где раньше их не было, что вызывает исключение с помощью функции edge.detect (). Мне интересно, есть ли какой-нибудь известный способ обойти это дело…
3. Ну, поскольку у вас есть объекты R, представляющие интерес (т. Е. На данный момент не MRE), протестируйте их
debugonce(edge.detect)
на своем ошибочном st_crop и выполните или сделайте то же самое, но замените other_object вариантами растра, которые уменьшены в размере…. Просто некоторые мысли об отладке этого.4. Я получаю следующую ошибку: Ошибка в h(simpleError(msg, вызов)) : ошибка при оценке аргумента » x «при выборе метода для функции «изображение»: отсутствует значение, где требуется TRUE/FALSE. Я думаю, проблема в том, что обрезка берет ранее квадратное изображение и вводит в изображение значения NA (пустые области). Мне интересно, есть ли способ исправить это с помощью edge.detect. Например, существует ли какой-то стандартный способ заполнить пустые области перед запуском функции обнаружения границ?
5. И разница, если вы сначала обрезаете, а затем передаете это в edge.обнаружить?