Страница 1 из 1

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, далее ругается на ненайденные векторные и растровые слои.
В какую сторону мне копать?

Re: r.fillnulls

Добавлено: 27 дек 2012, 09:54
Александр Мурый
Какая версия GRASS? Какая ОС и какой размер оперативки на машине?
Приведите свойства растра (размеры, разрешение). По растру был задан регион до запуска <r.fillnulls>?

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 аварийно завершила свою работу

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

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

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

Re: r.fillnulls

Добавлено: 28 дек 2012, 13:31
rhot
Попробуйте вдвое меньше регион задать,- сработает ли?

Re: r.fillnulls

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

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

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

Re: r.fillnulls

Добавлено: 28 дек 2012, 15:33
Игорь Черниенко
Судя по тому, что пишется в консоли, именно так оно и есть. Тогда модуль не сработает и на вдвое меньшем регионе. Попробую посчитать на разных регионах.

Re: r.fillnulls

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

Re: r.fillnulls

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

Re: r.fillnulls

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

Re: r.fillnulls

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

Re: r.fillnulls

Добавлено: 02 янв 2013, 13:08
Игорь Черниенко
"полосы" имеют значение 0, я выполнил r.null map=ls_07.1 setnull=0
я правильно понимаю, что бороться с дефектами снимка бесполезно?

PS

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

Re: r.fillnulls

Добавлено: 02 янв 2013, 13:40
rhot
Игорь Черниенко писал(а):я правильно понимаю, что бороться с дефектами снимка бесполезно?
если вы о полосатости LANDSAT 7, то ничего лучше масок пока не придумали.

Re: r.fillnulls

Добавлено: 02 янв 2013, 15:50
Игорь Черниенко
Спасибо, буду иметь ввиду. Но r.fillnuls все-таки тоже сработал :0)