r.fillnulls

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

r.fillnulls

Сообщение Игорь Черниенко »

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

Пытаюсь заполнить 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
Репутация: 792
Ваше звание: званий не имею
Откуда: Москва

Re: r.fillnulls

Сообщение Александр Мурый »

Какая версия GRASS? Какая ОС и какой размер оперативки на машине?
Приведите свойства растра (размеры, разрешение). По растру был задан регион до запуска <r.fillnulls>?
Редактор материалов, модератор форума
Аватара пользователя
Игорь Черниенко
Активный участник
Сообщения: 137
Зарегистрирован: 28 мар 2009, 01:05
Репутация: 11
Откуда: Хабаровск, Южно-Сахалинск

Re: r.fillnulls

Сообщение Игорь Черниенко »

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 »

Попробуйте вдвое меньше регион задать,- сработает ли?
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________
KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

Re: r.fillnulls

Сообщение KolesovDmitry »

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

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

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

Re: r.fillnulls

Сообщение Игорь Черниенко »

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

Re: r.fillnulls

Сообщение Игорь Черниенко »

Действительно, при сокращении рабочей области до определенного размера модуль заработал, однако результат вышел странный: на месте нулей так и остались нули, по их краям -- полосы шириной в одну ячейку
gamm
Гуру
Сообщения: 4168
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1107
Ваше звание: программист
Откуда: Казань

Re: r.fillnulls

Сообщение gamm »

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

Re: r.fillnulls

Сообщение Игорь Черниенко »

gamm писал(а):есть у вас вообще null в растре
Полосы на ландсатовских снимках имеют значение 0 -- я предварительно обработал их модулем r.null
gamm писал(а):Профильные специалисты
А я сам хочу :0)
Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 792
Ваше звание: званий не имею
Откуда: Москва

Re: r.fillnulls

Сообщение Александр Мурый »

Игорь Черниенко писал(а): Полосы на ландсатовских снимках имеют значение 0 -- я предварительно обработал их модулем r.null
Как именно вы обработали растры с помощью <r.null>? Вообще, <r.fillnulls> предназначен для заполнения небольших "дырок" в ЦМР, явно не для ландсатов.
Редактор материалов, модератор форума
Аватара пользователя
Игорь Черниенко
Активный участник
Сообщения: 137
Зарегистрирован: 28 мар 2009, 01:05
Репутация: 11
Откуда: Хабаровск, Южно-Сахалинск

Re: r.fillnulls

Сообщение Игорь Черниенко »

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

PS

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

Re: r.fillnulls

Сообщение rhot »

Игорь Черниенко писал(а):я правильно понимаю, что бороться с дефектами снимка бесполезно?
если вы о полосатости LANDSAT 7, то ничего лучше масок пока не придумали.
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________
Аватара пользователя
Игорь Черниенко
Активный участник
Сообщения: 137
Зарегистрирован: 28 мар 2009, 01:05
Репутация: 11
Откуда: Хабаровск, Южно-Сахалинск

Re: r.fillnulls

Сообщение Игорь Черниенко »

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

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

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

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