Страница 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)