Обнаружение краев на растре звезд в R с обрезанным растром

#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.обнаружить?