r.fillnulls

Ответить
Аватара пользователя
Игорь Черниенко
Активный участник
Сообщения: 137
Зарегистрирован: 28 мар 2009, 01:05
Репутация: 11
Откуда: Хабаровск, Южно-Сахалинск

r.fillnulls

Сообщение Игорь Черниенко » 27 дек 2012, 06:09

Здравствуйте

Пытаюсь заполнить null-значения в растре при помощи модуля r.fillnulls:

r.filnulls input=ls_07.1 output=ls_07_fill.1 (прочие параметры не трогаю)

После некоторых раздумий (записи выходного растрового слоя, получения точек, построения топологии выходного векторного слоя, построения примитивов) выдается ошибка: G_realloc: невозможно выделить 20924004 байт в struct_alloc.c:133, далее ругается на ненайденные векторные и растровые слои.
В какую сторону мне копать?

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 793
Ваше звание: званий не имею
Откуда: Москва

Re: r.fillnulls

Сообщение Александр Мурый » 27 дек 2012, 09:54

Какая версия GRASS? Какая ОС и какой размер оперативки на машине?
Приведите свойства растра (размеры, разрешение). По растру был задан регион до запуска <r.fillnulls>?
Редактор материалов, модератор форума

Аватара пользователя
Игорь Черниенко
Активный участник
Сообщения: 137
Зарегистрирован: 28 мар 2009, 01:05
Репутация: 11
Откуда: Хабаровск, Южно-Сахалинск

Re: r.fillnulls

Сообщение Игорь Черниенко » 28 дек 2012, 12:20

GRASS 6.4.2 на Ubuntu 12.10, оперативка 2 Гб., регион задан по размеру растра. Растр – один из каналов снимка landsat, свойства растра:
Rows: 7421
Columns: 8281
Total Cells: 61453301

В консоли имеем следующее:

r.fillnulls input=ls_07.1@kizi_set output=ls_07_fill.1
Locating and isolating NULL areas...
Чтение исходного растрового слоя <r_fillnulls_6544@kizi_set>...
Построение буферных зон...
Запись выходного растрового слоя <r_fillnulls_6544.buf>...
Creating interpolation points...
Получение точек...
Построение топологии для векторного слоя <vecttmp_fillnulls_6544>...
Регистрируются примитивы...
6310086 примитивов зарегистрировано
6310086 узлов зарегистрировано
Построение полигонов...
0 полигонов построено
0 островов создано
Назначаются острова...
Назначаются центроиды...
Количество узлов: 6310086
Количество примитивов: 6310086
Количество точек: 6310086
Количество линий: 0
Количество границ: 0
Количество центроидов: 0
Количество полигонов: 0
Количество островов: 0
dbmi: Protocol error
dbmi: Protocol error
Segmentation fault (core dumped)
ERROR: /usr/lib/grass64/scripts/r.fillnulls abandoned. Removing temporary maps, restoring user mask if needed:
Растровый слой <r_fillnulls_6544_filled> не найден
<r_fillnulls_6544_filled> nothing removed
Таблица <vecttmp_fillnulls_6544> связанная с векторным слоем <vecttmp_fillnulls_6544> не существует
raster <usermask_mask.6544> не найден
(Fri Dec 28 19:07:29 2012) Операция завершена (3281 sec)

при этом Ubuntu выдает сообщение об ошибке:

«Извините, программа r.to.vect аварийно завершила свою работу

В вашем компьютере недостаточно свободной памяти, чтобы автоматически проанализировать неполадку и отправить отчет разработчикам.»

Т.е. видимо, недостаточно памяти?

Где можно узнать поподробнее о работе модуля? Мне, честно признаться, не совсем понятно, как связаны интерполяция нулевых значений растра и векторные слои. Стоит ли приложить растр?

Аватара пользователя
rhot
Гуру
Сообщения: 1727
Зарегистрирован: 25 янв 2011, 17:50
Репутация: 194
Ваше звание: доктор
Откуда: Архангельск

Re: r.fillnulls

Сообщение rhot » 28 дек 2012, 13:31

Попробуйте вдвое меньше регион задать,- сработает ли?
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________

KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

Re: r.fillnulls

Сообщение KolesovDmitry » 28 дек 2012, 14:45

Вот как я себе представляю работу этого модуля (к сожалению, сейчас нет возможности проверить истинность предположения): модуль считывает данные из растра в векторный точечный слой и потом интерполирует вектор. Затем из проинтерполированных значений считываются данные для заполнения дыркок.

Если мое предположение верно, то идея заполнять дырки, используя весь растр Landsat, представляется не только крайне затратной, но и бессмысленной: значения пикселей в достаточном отдалении от дыры практически не оказывают влияния на результат при интерполяции.

Соответсвенно, для решения проблемы нужно попробовать выбрать регион, покрывающий дырку с не слишком большим нахлестом, и интерполировать разумное число точек, а не все 6.5 миллионов.

Аватара пользователя
Игорь Черниенко
Активный участник
Сообщения: 137
Зарегистрирован: 28 мар 2009, 01:05
Репутация: 11
Откуда: Хабаровск, Южно-Сахалинск

Re: r.fillnulls

Сообщение Игорь Черниенко » 28 дек 2012, 15:33

Судя по тому, что пишется в консоли, именно так оно и есть. Тогда модуль не сработает и на вдвое меньшем регионе. Попробую посчитать на разных регионах.

Аватара пользователя
Игорь Черниенко
Активный участник
Сообщения: 137
Зарегистрирован: 28 мар 2009, 01:05
Репутация: 11
Откуда: Хабаровск, Южно-Сахалинск

Re: r.fillnulls

Сообщение Игорь Черниенко » 29 дек 2012, 07:03

Действительно, при сокращении рабочей области до определенного размера модуль заработал, однако результат вышел странный: на месте нулей так и остались нули, по их краям -- полосы шириной в одну ячейку

gamm
Гуру
Сообщения: 4069
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1064
Ваше звание: программист
Откуда: Казань

Re: r.fillnulls

Сообщение gamm » 29 дек 2012, 08:18

Игорь Черниенко писал(а):Пытаюсь заполнить null-значения в растре при помощи модуля r.fillnulls
меня гложут смутные сомнения - есть у вас вообще null в растре? Профильные специалисты помогут составить запрос к растру, чтобы определить, так ли это.

Аватара пользователя
Игорь Черниенко
Активный участник
Сообщения: 137
Зарегистрирован: 28 мар 2009, 01:05
Репутация: 11
Откуда: Хабаровск, Южно-Сахалинск

Re: r.fillnulls

Сообщение Игорь Черниенко » 29 дек 2012, 14:54

gamm писал(а):есть у вас вообще null в растре
Полосы на ландсатовских снимках имеют значение 0 -- я предварительно обработал их модулем r.null
gamm писал(а):Профильные специалисты
А я сам хочу :0)

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 793
Ваше звание: званий не имею
Откуда: Москва

Re: r.fillnulls

Сообщение Александр Мурый » 29 дек 2012, 15:43

Игорь Черниенко писал(а): Полосы на ландсатовских снимках имеют значение 0 -- я предварительно обработал их модулем r.null
Как именно вы обработали растры с помощью <r.null>? Вообще, <r.fillnulls> предназначен для заполнения небольших "дырок" в ЦМР, явно не для ландсатов.
Редактор материалов, модератор форума

Аватара пользователя
Игорь Черниенко
Активный участник
Сообщения: 137
Зарегистрирован: 28 мар 2009, 01:05
Репутация: 11
Откуда: Хабаровск, Южно-Сахалинск

Re: r.fillnulls

Сообщение Игорь Черниенко » 02 янв 2013, 13:08

"полосы" имеют значение 0, я выполнил r.null map=ls_07.1 setnull=0
я правильно понимаю, что бороться с дефектами снимка бесполезно?

PS

С Новым Годом всех!

Аватара пользователя
rhot
Гуру
Сообщения: 1727
Зарегистрирован: 25 янв 2011, 17:50
Репутация: 194
Ваше звание: доктор
Откуда: Архангельск

Re: r.fillnulls

Сообщение rhot » 02 янв 2013, 13:40

Игорь Черниенко писал(а):я правильно понимаю, что бороться с дефектами снимка бесполезно?
если вы о полосатости LANDSAT 7, то ничего лучше масок пока не придумали.
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________

Аватара пользователя
Игорь Черниенко
Активный участник
Сообщения: 137
Зарегистрирован: 28 мар 2009, 01:05
Репутация: 11
Откуда: Хабаровск, Южно-Сахалинск

Re: r.fillnulls

Сообщение Игорь Черниенко » 02 янв 2013, 15:50

Спасибо, буду иметь ввиду. Но r.fillnuls все-таки тоже сработал :0)

Ответить

Вернуться в «GRASS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя