Кодирование многокомпонентных атрибутов для кодирования облака точек
ENCODING MULTICOMPONENT ATTRIBUTES FOR ENCODING A POINT CLOUD

ССЫЛКА НА РОДСТВЕННЫЕ ЗАЯВКИ
[0001] Настоящая заявка испрашивает приоритет патентной заявки США №17/332213, поданной 27 мая 2021 г., которая, в свою очередь, испрашивает приоритет временной заявки США №63/066121, поданной 14 августа 2020 г. в ведомство по патентам и товарным знакам США, которые включены в настоящий документ по ссылке в полном объеме.
ОБЛАСТЬ ТЕХНИКИ, К КОТОРОЙ ОТНОСИТСЯ ИЗОБРЕТЕНИЕ
[0002] Настоящее изобретение относится в общем к области обработки данных и, в частности, к кодированию облака точек.
УРОВЕНЬ ТЕХНИКИ
[0003] В последние годы облака точек находят широкое применение. Например, они используются в автономных транспортных средствах для обнаружения и локализации объектов; они также используются в географических информационных системах (ГИС) для составления карт, а также в сфере культурного наследия для визуализации и архивирования объектов и коллекций и т.д. Облака точек содержат набор многомерных, как правило, трехмерных (3D) точек, каждая из которых характеризуется трехмерной информацией о положении в пространстве, а также дополнительными атрибутами, такими как цвет, отражение и т.д. Они могут быть создаваться с помощью нескольких камер и датчиков глубины или с помощью лидара в различных конфигурациях и могут включать в себя от тысяч до миллиардов точек, позволяющих реалистично представить исходные сцены. Чтобы уменьшить объем данных, необходимых для представления облака точек, с целью его более быстрой передачи или сокращения объема хранилища, требуется использовать технологии сжатия.
СУЩНОСТЬ ИЗОБРЕТЕНИЯ
[0004] Варианты осуществления изобретения относятся к способу, системе и машиночитаемому носителю для кодирования облака точек. Согласно одному аспекту настоящего изобретения предлагается способ кодирования облака точек. Способ может включать в себя прием, из битового потока, данных, соответствующих облаку точек; получение из этих данных первого остатка предсказания первого компонента из множества компонентов атрибута, связанного с облаком точек; восстановление первого остатка предсказания; определение предсказанного второго остатка предсказания на основе восстановленного первого остатка предсказания и по меньшей мере одного параметра модели; получение второго остатка предсказания второго компонента из множества компонентов на основе предсказанного второго остатка предсказания; восстановление второго остатка предсказания; и декодирование данных, соответствующих облаку точек, на основе восстановленных первого и второго остатков предсказания.
[0005] Согласно другому аспекту настоящего изобретения предлагается компьютерная система для кодирования облака точек. Компьютерная система может содержать один или более процессоров, одну или более машиночитаемую память, одно или более машиночитаемых физических запоминающих устройств и программные инструкции, записанные по меньшей мере на одном из этих устройств хранения данных и предназначенные для исполнения по меньшей мере одним из процессоров с помощью по меньшей мере одной памяти, в результате чего компьютерная система может реализовать данный способ. Способ может включать в себя прием, из битового потока, данных, соответствующих облаку точек; получение из этих данных первого остатка предсказания первого компонента из множества компонентов атрибута, связанного с облаком точек; восстановление первого остатка предсказания; определение предсказанного второго остатка предсказания на основе восстановленного первого остатка предсказания и по меньшей мере одного параметра модели; получение второго остатка предсказания второго компонента из множества компонентов на основе предсказанного второго остатка предсказания; восстановление второго остатка предсказания; и декодирование данных, соответствующих облаку точек, на основе восстановленных первого и второго остатков предсказания.
[0006] Согласно еще одному аспекту настоящего изобретения предлагается машиночитаемый носитель для кодирования облака точек. Машиночитаемый носитель может содержать одно или более машиночитаемых запоминающих устройств и программные инструкции, записанные по меньшей мере на одном из этих физических устройств хранения данных, причем эти программные инструкции могут исполняться процессором. Программные инструкции выполняются процессором для реализации способа, который может включать в себя прием, из битового потока, данных, соответствующих облаку точек; получение из этих данных первого остатка предсказания первого компонента из множества компонентов атрибута, связанного с облаком точек; восстановление первого остатка предсказания; определение предсказанного второго остатка предсказания на основе восстановленного первого остатка предсказания и по меньшей мере одного параметра модели; получение второго остатка предсказания второго компонента из множества компонентов на основе предсказанного второго остатка предсказания; восстановление второго остатка предсказания; и декодирование данных, соответствующих облаку точек, на основе восстановленных первого и второго остатков предсказания.
КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ
[0007] Эти и другие цели, особенности и преимущества настоящего изобретения будут понятны из приведенного ниже подробного описания иллюстративных вариантов осуществления, которое следует рассматривать совместно с чертежами. Различные элементы чертежей выполнены не в масштабе, поскольку иллюстрации приводятся для наглядности с целью облегчить понимание изобретения специалистами в данной области техники и сопровождаются подробным описанием. На чертежах:
На фиг. 1. представлена сетевая компьютерная среда согласно по меньшей мере одному варианту осуществления.
На фиг. 2А-2В представлены структурные схемы систем обновления облака точек согласно по меньшей мере одному варианту осуществления.
На фиг. 2С представлена схема регионально-адаптивного иерархического преобразования (RAHT, region adaptive hierarchical transform) согласно по меньшей мере одному варианту осуществления.
На фиг. 2D представлена таблица элементов синтаксиса для остатков предсказания согласно по меньшей мере одному варианту осуществления.
На фиг. 3А-3В представлена блок-схема алгоритма программы кодирования облака точек согласно по меньшей мере одному варианту осуществления.
На фиг. 4 представлена структурная схема внутренних и внешних компонентов компьютеров и серверов, изображенных на фиг. 1, согласно по меньшей мере одному варианту осуществления.
На фиг. 5 представлена структурная схема типовой облачной среды, содержащей компьютерную систему, изображенную на фиг. 1, согласно по меньшей мере одному варианту осуществления.
На фиг. 6 представлена структурная схема функциональных уровней типовой облачной среды, изображенной на фиг. 5, согласно по меньшей мере одному варианту осуществления.
ПОДРОБНОЕ ОПИСАНИЕ
[0008] В настоящем документе подробно описываются варианты осуществления предложенных структур и способов; однако следует иметь в виду, что описанные здесь варианты осуществления лишь иллюстрируют предложенные структуры и способы, которые могут быть воплощены в различных формах. Поскольку эти структуры и способы могут быть воплощены во множестве различных форм, описанные здесь варианты осуществления не следует рассматривать как ограничение для возможных реализаций. Эти варианты осуществления приводятся с целью всестороннего и полного описания настоящего изобретения, чтобы оно было в полной мере понятно специалистам в данной области. Во избежание неоправданной перегрузки представленных вариантов осуществления деталями, подробные описания известных признаков и методов могут быть опущены.
[0009] Варианты осуществления относятся к области обработки данных, в общем, и к кодированию облака точек, в частности. В описанных ниже примерах осуществления предлагаются система, способ и компьютерная программа, позволяющие, в частности, использовать способы межкомпонентной корреляции для кодирования данных атрибутов облака точек. Таким образом, некоторые варианты осуществления изобретения позволяют усовершенствовать область вычислений, обеспечивая более высокую эффективность кодирования облака точек, поскольку не требуется искать ближайших соседей данных облака точек.
[0010] Как указано выше, в последние годы облака точек находят широкое применение. Например, они используются в автономных транспортных средствах для обнаружения и локализации объектов; они также используются в географических информационных системах (ГИС) для составления карт, а также в сфере культурного наследия для визуализации и архивирования объектов и коллекций и т.д. Облака точек содержат набор многомерных, как правило, трехмерных (3D) точек, каждая из которых характеризуется трехмерной информацией о положении в пространстве, а также дополнительными атрибутами, такими как цвет, отражение и т.д. Они могут быть создаваться с помощью нескольких камер и датчиков глубины или с помощью лидара в различных конфигурациях и могут включать в себя от тысяч до миллиардов точек, позволяющих реалистично представить исходные сцены. Чтобы уменьшить объем данных, необходимых для представления облака точек, с целью его более быстрой передачи или сокращения объема хранилища, требуется использовать технологии сжатия. При кодировании атрибутов на основе предсказания атрибут текущей точки предсказывается по уже кодированным точкам, которые находятся вблизи текущей точки.
[0011] В модели ТМС13 геометрическая информация и сопутствующие атрибуты, такие как цвет или отражение, сжимаются по отдельности. Геометрическая информация, то есть трехмерные координаты облака точек, кодируется путем разбиения октодерева с информацией о его заполненности. Затем атрибуты подвергаются сжатию на основе восстановленной геометрии с использованием методов предсказания, лифтинга (lifting) и регионально-адаптивного иерархического преобразования. Однако поиск ближайших точек для каждой точки трехмерного пространства может оказаться затратным. Кроме того, при кодировании без потерь и почти без потерь многоканальных атрибутов, например, цветов в системе RGB, несколько каналов обрабатываются напрямую без преобразования цветового пространства и кодируются независимо. Однако, как правило, между различными цветовыми каналами наблюдается сильная корреляция, особенно в пространстве RGB. Отказ от использования такой корреляции может привести к снижению эффективности кодирования. Поэтому может оказаться целесообразным использовать корреляцию между компонентами.
[0012] Описание аспектов настоящего изобретения опирается на блок-схемы и/или структурные схемы способов, устройств (систем) и машиночитаемых носителей согласно различным вариантам осуществления изобретения. Следует иметь в виду, что каждый блок блок-схемы и/или структурной схемы, а также комбинации блоков блок-схемы и/или структурной схемы могут быть реализованы с помощью машиночитаемых программных инструкций.
[0013] На фиг. 1 представлена функциональная схема сетевой компьютерной среды, иллюстрирующая систему кодирования облака точек 100 (далее «система») для кодирования данных облака точек. Следует иметь в виду, что на фиг. 1 представлен лишь один вариант осуществления, который не накладывает никаких ограничений в отношении других сред, где могут быть реализованы другие варианты осуществления. Изображенные среды могут быть изменены различными способами в зависимости от требований к проектированию и реализации.
[0014] Система 100 может содержать компьютер 102 и сервер 114. Компьютер 102 может взаимодействовать с сервером 114 по сети 110 связи (далее «сеть»). Компьютер 102 может содержать процессор 104 и программное обеспечение 108, которое хранится в запоминающем устройстве 106 и может взаимодействовать с пользователем и обмениваться данными с сервером 114. Как будет показано ниже со ссылкой на фиг. 4, компьютер 102 может содержать внутренние компоненты 800А и внешние компоненты 900А, а сервер 114 может содержать внутренние компоненты 800В и внешние компоненты 900В. Компьютер 102 может быть, в частности, мобильным устройством, телефоном, карманным портативным компьютером, нетбуком, ноутбуком, планшетным компьютером, настольным компьютером или любым типом вычислительного устройства, которое может исполнять программу, подключаться к сети и обращаться к базе данных.
[0015] Сервер 114 может также работать в рамках модели облачных сервисов, таких как программное обеспечение как услуга (SaaS, Software as a Service), платформа как услуга (PaaS, Platform as a Service) или инфраструктура как услуга (laaS, Infrastructure as a Service), как показано ниже в описании фиг. 5 и фиг. 6. Сервер 114 также может находиться в облачной модели развертывания вычислительных ресурсов, например, в частном облаке, коммунальном облаке, общедоступном облаке или гибридном облаке.
[0016] Сервер 114, который может использоваться для кодирования облака точек, способен исполнять программу кодирования облака точек 116 (далее «программа»), которая может взаимодействовать с базой данных 112. Более подробно способ программы кодирования облака точек описывается ниже в контексте фиг. 3А-3В. В одном варианте осуществления компьютер 102 может выполнять функции устройства ввода, предоставляющего пользовательский интерфейс, а программа 116 может выполняться преимущественно на сервере 114. В другом варианте осуществления программа 116 может выполняться преимущественно на одном или более компьютерах 102, а сервер 114 может использоваться для обработки и хранения данных, которые используются программой 116. Следует отметить, что программа 116 может быть автономной или интегрированной в более крупную программу кодирования облака точек.
[0017] Однако нужно иметь в виду, что в некоторых случаях функции обработки программы 116 могут быть распределены между компьютерами 102 и серверами 114 в любых соотношениях. Еще в одном варианте осуществления программа 116 может работать на нескольких компьютерах, серверных компьютерах или комбинации компьютеров и серверных компьютеров, например, на нескольких компьютерах 102, взаимодействующих по сети 110 с одним сервером 114. В другом варианте осуществления программа 116 может работать, например, на нескольких серверах 114, взаимодействующих по сети 110 с несколькими клиентскими компьютерами. Как вариант, программа может работать на сетевом сервере, взаимодействующем по сети с сервером и несколькими клиентскими компьютерами.
[0018] Сеть 110 может содержать проводные соединения, беспроводные соединения, оптоволоконные соединения или комбинацию вышеперечисленных соединений. В целом сеть 110 может представлять собой любую комбинацию соединений и протоколов, которые обеспечивают взаимодействие между компьютером 102 и сервером 114. Сеть 110 может включать в себя различные типы сетей, в том числе локальную сеть (LAN, local area network), глобальную сеть (WAN, wide area network), например Интернет, телекоммуникационную сеть, например телефонную сеть общего пользования (ТфОП), беспроводную сеть, коммутируемую сеть общего пользования, спутниковую сеть, сеть сотовой связи (например сеть пятого поколения (5G), сеть LTE, сеть третьего поколения (3G), сеть множественного доступа с кодовым разделением (CDMA, code division multiple access) и т.д.), сеть сотовой связи общего пользования (ССОП), городскую сеть (MAN, metropolitan area network), частную сеть, специальную сеть, интранет, оптоволоконную сеть и т.п., а также (или) комбинацию этих или других типов сетей.
[0019] Количество и распределение устройств и сетей, показанных на фиг. 1, приведено в качестве примера. На практике могут использоваться дополнительные устройства и/или сети, меньшее количество устройств и/или сетей, другие устройства и/или сети либо устройства и/или сети, организованные иначе, чем показано на чертеже. 1. Кроме того, два или более устройств, изображенных на фиг. 1, могут быть реализованы в составе одного устройства, либо одно устройство, изображенное на фиг. 1, может быть реализовано в виде нескольких распределенных устройств. В качестве дополнительного или альтернативного варианта некоторые устройства системы 100 (например, одно или более устройств) могут выполнять одну или более функций, которые в описании закреплены за другими устройствами системы 100.
[0020] Обратимся к фиг. 2А и 2В, на которых представлены структурные схемы 200А и 200В систем обновления облака точек. На структурной схеме 200А представлено прямое преобразование в схеме лифтинга. На структурной схеме 200В представлено обратное преобразование в схеме лифтинга.
i
i=1…N
i
i=1…N
i
i=1…N
i
i
i
i
i∈0…k-1
i
a
[0021] Для кодирования атрибутов на основе предсказания, пусть (P) - набор положений, связанных с точками облака точек, a (M) - коды Мортона, связанные с (P). Сначала производится сортировка точек согласно их соответствующим кодам Мортона в порядке возрастания. Пусть I - массив индексов точек, упорядоченных в соответствии с этой процедурой. Кодер/декодер выполняет сжатие/декомпрессию точек в соответствии с порядком, определенным в I. На каждой итерации i выбирается точка P. Анализируются расстояния от положений P до s (например, s=64) ближайших точек и k (например, k=3) ближайших соседей P выбираются для предсказания. Если говорить точнее, то значения атрибутов () предсказываются с помощью процедуры линейной интерполяции на основе расстояний между ближайшими соседями точки i. Пусть ℵ - набор k ближайших соседей текущей точки i и пусть  - их декодированные/восстановленные значения атрибутов, а  - расстояния от них до текущей точки. Предсказанное значение атрибута  определяется следующим образом:
[0022] Кодирование атрибутов на основе лифтинга базируется на кодировании на основе предсказания. Основное отличие от схемы на основе предсказания заключается в том, что вводятся два дополнительных шага. Первый - это оператор обновления. Второй - использование стратегии адаптивного квантования.
0
1
[0023] Теперь обратимся к фиг. 2С, где показана схема 200С регионально-адаптивного иерархического преобразования (RAHT). На структурной схеме 200С представлено прямое преобразование 202А и обратное преобразование 202В. В кодировании RAHT  и  при этом w обозначает вес входного коэффициента  a w - соответственно
[0024] Чтобы использовать корреляцию между различными компонентами, схемы предсказания можно применять в различных способах кодирования атрибутов, например, при кодировании атрибутов на основе предсказания, на основе лифтинга и на основе RAHT. Межкомпонентное предсказание может применяться к исходным сигналам, остаткам предсказания или коэффициентам преобразования (если используется какой-либо метод преобразования, например, RAHT). В описываемых ниже вариантах осуществления в качестве примера используется кодирование атрибутов на основе предсказания, а схема межкомпонентного предсказания применяется к остаткам предсказания различных каналов (или компонентов).
[0025] Для межкомпонентного предсказания сигналов можно строить различные модели, например, линейную, квадратичную и другие полиномиальные модели. В приведенных ниже вариантах осуществления в качестве примера используются линейные модели.
[0026] Межкомпонентное предсказание не ограничивается цветовыми атрибутами RGB и может использоваться для любых других атрибутов при условии, что кодируется более одного типа атрибутов и между ними существует корреляция. В приведенных ниже вариантах осуществления в качестве примера используются цветовые атрибуты RGB.
0
1
2
[0027] Пусть r, r, r - остатки предсказания соответственно для цветовых компонент R, G и В, и предположим, что между этими сигналами существует линейная корреляция. Эти компоненты могут кодироваться в любом порядке. Порядок кодирования может быть фиксированным для всех случаев или может конфигурироваться для каждого случая по-разному и передаваться в битовом потоке как часть синтаксиса высокого уровня, например, в наборе параметров последовательности, наборе геометрических параметров, в заголовке слайса и т.д. В описываемом ниже варианте осуществления предполагается, что сначала кодируется компонента R, а затем следуют G и В. Таким образом, при кодировании остатков предсказания G для предсказания можно использовать восстановленные остатки предсказания R; а при кодировании остатков предсказания В для предсказания можно использовать восстановленные остатки предсказания R и G.
0
0
1
0
[0028] Предположим, что в первую очередь кодируется остаток предсказания компоненты R, т.е. r, и R - его восстановленное значение после квантования/деквантования. Тогда остаток предсказания компоненты G, т.е. r, можно предсказать по R следующим образом:
1
0
0
0
p=αR+β,
0
0
1
1
1
1
2
0
1
где α и β - параметры линейной модели, а р - предсказанный остаток предсказания компоненты G. Таким образом, вместо непосредственного кодирования остатка предсказания r можно кодировать остаток второго порядка между r и р, т.е.  Затем кодируется остаток второго порядка компоненты  его восстановленное значение после квантования/деквантования,  а восстановленный остаток предсказания компоненты G равен  Наконец, остаток предсказания компоненты В, т.е. r, можно предсказать по R и R следующим образом,
2
1
0
1
1
1
p=αR+βR+γ,
1
1
1
2
2
2
2
где α, β и γ - параметры линейной модели, а р - предсказанный остаток предсказания компоненты В. Таким образом, вместо непосредственного кодирования остатка предсказания r можно кодировать остаток второго порядка между r и р, т.е.  Затем кодируется остаток второго порядка компоненты В  и его восстановленное значение после квантования/деквантования равно  а восстановленный остаток предсказания компоненты В равен
[0029] Линейные модели можно упростить различными способами, как предлагается ниже. При этом следует учитывать, что могут использоваться любые аналогичные способы упрощения. В одном из вариантов осуществления линейные модели упрощаются следующим образом:
1
0
0
2
1
0
1
1
p=αR, р=αR+βR,
0
1
где β и γ равны нулю. В другом варианте осуществления линейные модели упрощаются следующим образом:
1
0
0
2
1
0
p=αR, p=αR,
0
1
1
где β, γ и β равны нулю. В другом варианте осуществления линейные модели упрощаются следующим образом:
1
0
0
2
1
1
p=αR, p=βR,
0
1
1
где β, γ и α равны нулю. В другом варианте осуществления линейные модели упрощаются следующим образом:
1
0
0
2
0
0
p=αR, p=αR,
0
1
1
1
0
где β, γ и β равны нулю, а α=α. В другом варианте осуществления линейные модели упрощаются следующим образом:
1
0
0
2
0
1
p=αR, p=αR,
0
1
1
1
0
где β, γ и α равны нулю, а β=α.
[0030] В упомянутых выше линейных моделях параметры модели могут быть фиксированными для кодера и декодера и для всех случаев. В одном из вариантов осуществления предсказание может выглядеть следующим образом:
1
0
2
0
p=R, р=R;
1
0
2
1
p=R, p=R; или
1
0
p=R,
[0031] Однако для разных облаков точек параметры модели могут быть разными; информацию о них можно сигнализировать в синтаксисе высокого уровня, например, в наборе параметров последовательности, наборе параметров атрибутов, заголовке слайса и т.д.
[0032] В других вариантах осуществления информацию о параметрах модели можно также сигнализировать в виде «синтаксиса низкого уровня», то есть у каждого блока кодирования (узла) могут быть различные наборы параметров.
[0033] В другом варианте осуществления, во избежание сигнализации информации о параметрах модели в явном виде, можно узнавать о параметрах адаптивно, путем обучения непосредственно в процессе обработки по восстановленным остаткам предсказания. Кодер и декодер могут проходить один и тот же этап обучения в процессе кодирования, минимизируя среднеквадратичную ошибку.
[0034] Теперь обратимся к фиг. 2D, где в таблице 200D представлены элементы синтаксиса остатков предсказания. Для более эффективного кодирования остатков предсказания в различных компонентах атрибутов может использоваться разный контекст. В одном из вариантов осуществления для всех компонент R, G и В используются различные контекстные модели, prediction_residual_is_zero[i] указывает, равен ли остаток предсказания i-й компоненты 0. prediction_residual_is_one[i] указывает, равен ли остаток предсказания i-й компоненты 1. prediction_residual_is_two[i] указывает, равен ли остаток предсказания i-й компоненты 2. prediction_residual_minus_three[i] определяет остаток предсказания i-й компоненты как prediction_residual_minus_three[i]+3. В другом варианте осуществления для компоненты R используется отдельная контекстная модель, а для компонент G и В - одна и та же контекстная модель.
[0035] На фиг. 3А и 3В представлены блок-схемы примеров процессов 300А и 300В для кодирования облака точек. Фиг. 3А-3В могут описываться с помощью фиг. 1 и фиг. 2A-2D. В возможных вариантах осуществления, один или несколько блоков процессов 300А и 300В могут комбинироваться в любом порядке. Например, блоки процесса 300В могут выполняться после блоков процесса 300А с использованием результатов процесса 300А.
[0036] Как показано на фиг. 3А, процесс 300А может включать в себя прием, из битового потока, данных, соответствующих облаку точек (блок 311).
[0037] Кроме того, как также показано на фиг. 3А, процесс 300А может включать в себя получение из этих данных первого остатка предсказания первого компонента из множества компонентов атрибута, связанного с облаком точек (блок 312).
[0038] Кроме того, как также показано на фиг. 3А, процесс 300А может включать в себя восстановление первого остатка предсказания (блок 313).
[0039] Кроме того, как также показано на фиг. 3А, процесс 300А может включать в себя определение предсказанного второго остатка предсказания на основе восстановленного первого остатка предсказания и по меньшей мере одного параметра модели (блок 314).
[0040] Кроме того, как также показано на фиг. 3А, процесс 300А может включать в себя получение второго остатка предсказания второго компонента из множества компонентов на основе предсказанного второго остатка предсказания (блок 315).
[0041] Кроме того, как также показано на фиг. 3А, процесс 300А может включать в себя восстановление второго остатка предсказания (блок 316).
[0042] Кроме того, как также показано на фиг. 3А, процесс 300А может включать в себя декодирование данных, соответствующих облаку точек, на основе восстановленных первого и второго остатков предсказания (блок 317).
[0043] Как показано на фиг. 3В, процесс 300В может включать в себя определение предсказанного третьего остатка предсказания на основе восстановленного первого остатка предсказания, восстановленного второго остатка предсказания и по меньшей мере одного параметра модели (блок 321).
[0044] Кроме того, как также показано на фиг. 3В, процесс 300В может включать в себя получение третьего остатка предсказания третьего компонента из множества компонентов на основе предсказанного третьего остатка предсказания (блок 322).
[0045] Кроме того, как также показано на фиг. 3В, процесс 300В может включать в себя восстановление третьего остатка предсказания (блок 323).
[0046] Кроме того, как также показано на фиг. 3В, процесс 300В может включать в себя декодирование данных, соответствующих облаку точек, на основе восстановленных первого, второго и третьего остатков предсказания (блок 324).
[0047] В вариантах осуществления изобретения первый, второй и третий компоненты могут соответствовать компонентам, рассмотренным выше в контексте фиг. 1 и фиг. 2А-2С. Например, первый, второй и третий компоненты могут в различной форме соответствовать рассмотренным выше компонентам R, G и В, или любым другим компонентам или каналам.
0
1
1
2
0
1
1
1
[0048] В вариантах осуществления изобретения блоки процессов 300А и 300В могут быть реализованы с помощью любого из рассмотренных выше уравнений. Например, в вариантах осуществления изобретения, R может представлять восстановленный первый остаток предсказания, p - предсказанный второй остаток предсказания, R - восстановленный второй остаток предсказания, p - предсказанный третий остаток предсказания, а α, α, β и γ, соответственно, могут представлять параметры по меньшей мере одной модели.
[0049] В вариантах осуществления изобретения, модель, соответствующая по меньшей мере одному параметру модели, может представлять собой по меньшей мере одну из линейной модели, квадратичной модели и полиномиальной модели.
[0050] В вариантах осуществления изобретения по меньшей мере один параметр модели может сигнализироваться в данных.
[0051] В вариантах осуществления изобретения по меньшей мере один параметр модели может быть заранее задан.
[0052] В вариантах осуществления изобретения по меньшей мере один параметр модели может быть получен адаптивно путем обучения на основе по меньшей мере одного из восстановленных первого и второго остатков предсказания.
[0053] В вариантах осуществления изобретения первый компонент может быть связан с первой контекстной моделью, а второй компонент может быть связан со второй контекстной моделью, отличной от первой контекстной модели.
[0054] Следует иметь в виду, что на фиг. 3А-3В представлены лишь примеры вариантов осуществления, которые не накладывают никаких ограничений в отношении возможности реализации других вариантов осуществления. Изображенные среды могут быть изменены различными способами в зависимости от требований к проектированию и реализации.
[0055] На фиг. 4 представлена структурная схема 400 внутренних и внешних компонентов компьютеров и серверов, изображенных на фиг. 1, согласно одному варианту осуществления. Следует иметь в виду, что на фиг. 4 представлен лишь один вариант осуществления, который не накладывает никаких ограничений в отношении других сред, где могут быть реализованы другие варианты осуществления. Изображенные среды могут быть изменены различными способами в зависимости от требований к проектированию и реализации.
[0056] Компьютер 102 (фиг. 1) и сервер 114 (фиг. 1) могут включать в себя соответствующие наборы внутренних компонентов 800А, В и внешних компонентов 900А, В, показанные на фиг. 5. Каждый набор внутренних компонентов 800 содержит один или более процессоров 820, одно или более машиночитаемых ОЗУ 822 и одно или более машиночитаемых ПЗУ 824 на одной или более шинах 826, одну или более операционных систем 828 и одно или более машиночитаемых физических запоминающих устройств 830.
[0057] Процессор 820 реализован в виде аппаратных средств, микропрограммного обеспечения или комбинации аппаратных средств и программного обеспечения. Процессор 820 может представлять собой центральный процессор (CPU, central processing unit), графический процессор (GPU, graphics processing unit), гибридный процессор (APU, accelerated processing unit), микропроцессор, микроконтроллер, цифровой сигнальный процессор (DSP, digital signal processor), программируемую логическую интегральную схему (FPGA, field-programmable gate array), интегральную схему специального назначения (ASIC, application-specific integrated circuit) или вычислительный компонент другого типа. В некоторых вариантах реализации процессор 820 может включать в себя один или более процессоров, которые могут быть запрограммированы на выполнение определенной функции. Шина 826 содержит компонент, который обеспечивает обмен данными между внутренними компонентами 800А, В.
[0058] Одна или более операционных систем 828, программное обеспечение 108 (фиг. 1) и программа кодирования облака точек 116 (фиг. 1) на сервере 114 (фиг. 1) хранятся, соответственно, на одном или более машиночитаемых физических запоминающих устройствах 830 для исполнения, соответственно, одним или более процессорами 820 с помощью, соответственно, одного или более ОЗУ 822 (которые обычно включают в себя кэш-память). В варианте осуществления, показанном на фиг. 4, каждое машиночитаемое запоминающее устройство 830 представляет собой магнитный диск встроенного накопителя на жестком диске. В качестве альтернативного варианта каждое машиночитаемое физическое запоминающее устройство 830 может представлять собой полупроводниковое запоминающее устройство, например ПЗУ 824, ППЗУ, флэш-память, оптический диск, магнитооптический диск, твердотельный диск, компакт-диск (CD, compact disc), цифровой многоцелевой диск (DVD, digital versatile disc), дискету, картридж, магнитную ленту и/или другое машиночитаемое физическое запоминающее устройство, на котором могут храниться компьютерная программа и цифровая информация.
[0059] Каждый набор внутренних компонентов 800А, В также включает в себя привод или интерфейс ввода-вывода 832 для чтения данных с одного или более портативных машиночитаемых физических запоминающих устройств 936, например CD-ROM, DVD, карты памяти, магнитной ленты, магнитного диска, оптического диска или полупроводникового запоминающего устройства, и для записи данных на такие устройства. Программное обеспечение, например, программное обеспечение 108 (фиг. 1) и программа кодирования облака точек 116 (фиг. 1), может храниться, соответственно, на одном или более портативных машиночитаемых физических запоминающих устройствах 936, считываться с помощью соответствующего привода или интерфейса ввода-вывода 832 и загружаться на соответствующий жесткий диск 830.
[0060] Каждый набор внутренних компонентов 800А, В также включает в себя сетевые адаптеры или интерфейсы 836, например платы адаптера TCP/IP, платы беспроводного интерфейса Wi-Fi, платы беспроводного интерфейса 3G, 4G или 5G либо другие проводные или беспроводные каналы связи. Программное обеспечение 108 (фиг. 1) и программа кодирования облака точек 116 (фиг. 1) на сервере 114 (фиг. 1) могут быть скачаны в компьютер 102 (фиг. 1) и сервер 114 с внешнего компьютера через сеть (например Интернет, локальную сеть или другую глобальную сеть) и соответствующие сетевые адаптеры или интерфейсы 836. От сетевых адаптеров или интерфейсов 836 программное обеспечение 108 и программа кодирования облака точек 116 на сервере 114 загружаются на соответствующий жесткий диск 830. Сеть может быть построена на основе медных проводов, оптических волокон, беспроводных средств передачи данных, маршрутизаторов, межсетевых экранов, коммутаторов, шлюзовых компьютеров и/или периферийных серверов.
[0061] Каждый набор внешних компонентов 900А, В может содержать компьютерный монитор 920, клавиатуру 930 и компьютерную мышь 934. Внешние компоненты 900А, В могут также включать в себя сенсорные экраны, виртуальные клавиатуры, сенсорные панели, указывающие устройства и другие устройства для пользовательского интерфейса. Каждый набор внутренних компонентов 800А, В также включает в себя драйверы устройств 840 для подключения компьютерного монитора 920, клавиатуры 930 и компьютерной мыши 934. Драйверы устройств 840, привод или интерфейс ввода-вывода 832 и сетевой адаптер или интерфейс 836 состоят из аппаратных средств и программного обеспечения, которое хранится в запоминающем устройстве 830 и/или ПЗУ 824.
[0062] Хотя выше приведено подробное описание облачных технологий, реализация изложенных здесь принципов не ограничивается облачной средой. Напротив, некоторые варианты осуществления могут быть реализованы в любой другой вычислительной среде, как известной в настоящее время, так и созданной в будущем.
[0063] Облачные вычисления представляют собой модель предоставления услуг для обеспечения удобного сетевого доступа по запросу к общему пулу конфигурируемых вычислительных ресурсов (например, сетей, сетевой пропускной способности, серверов, ресурсов обработки, памяти, хранения, приложений, виртуальных машин и сервисов), которые могут быть быстро подготовлены и переданы при минимальных управленческих затратах и взаимодействии с поставщиком услуг. Такая облачная модель может описываться не менее чем пятью характеристиками и включать в себя не менее трех сервисных моделей и не менее четырех моделей развертывания.
[0064] Характеристики следующие:
Самообслуживание по запросу: потребитель облака может в одностороннем порядке, автоматически, по мере необходимости выделять вычислительные ресурсы, например время работы сервера и сетевое хранилище, без необходимости взаимодействия с поставщиком услуг.
Широкий сетевой доступ: доступ к ресурсам осуществляется по сети и с помощью стандартных механизмов, которые позволяют использовать гетерогенные платформы с тонкими или толстыми клиентами (например мобильные телефоны, ноутбуки и КПК).
Объединение ресурсов в пул: вычислительные ресурсы поставщика объединяются в пул для обслуживания множества потребителей с использованием многоарендной модели, при этом различные физические и виртуальные ресурсы динамически выделяются и перераспределяются в зависимости от спроса. Независимость от местоположения проявляется в том, что потребитель обычно не контролирует точное местоположении предоставляемых ресурсов или не знает о нем, но может задать местоположение на более высоком уровне абстракции (на уровне страны, региона или центра обработки данных).
Быстрая эластичность: ресурсы могут оперативно и гибко предоставляться для быстрого горизонтального масштабирования, в некоторых случаях автоматически, и оперативно высвобождаться для быстрого сокращения. Потребителю доступные для выделения ресурсы часто представляются неограниченными и могут быть приобретены в любом объеме в любой момент.
Измеряемый сервис: облачные системы автоматически контролируют и оптимизируют использование ресурсов, опираясь на возможности учета на определенном уровне абстракции в зависимости от типа сервиса (например хранение, обработка, пропускная способность и активные учетные записи пользователей). Использование ресурсов можно отслеживать, регулировать и регистрировать, обеспечивая прозрачность как для поставщика, так и для потребителя используемого сервиса.
[0065] Сервисные модели следующие:
Программное обеспечение как услуга (SaaS): потребителю предоставляется возможность использовать приложения поставщика, работающие в облачной инфраструктуре. Приложения доступны с различных клиентских устройств через интерфейс тонкого клиента, такой как веб-браузер (например, веб-клиент электронной почты) Потребитель не управляет базовой облачной инфраструктурой, включая сеть, серверы, операционные системы, хранилища и даже отдельные возможности приложений, кроме ограниченных пользовательских параметров конфигурации приложений.
Платформа как услуга (PaaS): потребителю предоставляется возможность развертывать в облачной инфраструктуре собственные или приобретенные приложения, созданные с помощью языков программирования и инструментов, которые поддерживает поставщик. Потребитель не управляет базовой облачной инфраструктурой, включая сеть, серверы, операционные системы или хранилища, но контролирует развернутые приложения и, возможно, конфигурации среды размещения приложений.
Инфраструктура как услуга (laaS): потребителю предоставляется возможность выделять ресурсы обработки, хранения, сетевые и другие базовые вычислительные ресурсы, с помощью которых потребитель может развертывать и запускать произвольное программное обеспечение, в том числе операционные системы и приложения. Потребитель не управляет базовой облачной инфраструктурой, но контролирует операционные системы, хранилища, развернутые приложения и, возможно, ограниченно управляет отдельными сетевыми компонентами (например, брандмауэрами хоста).
[0066] Модели развертывания следующие:
Частное облако: облачная инфраструктура используется исключительно в интересах организации. Она может находиться под управлением организации или третьей стороны и может существовать как локально, так и дистанционно.
Коммунальное облако: облачная инфраструктура совместно используется несколькими организациями и поддерживает определенное сообщество с общими потребностями (например миссия, требования к безопасности, политика и соответствие нормативным требованиям). Она может находиться под управлением организаций или третьей стороны и может существовать как локально, так и дистанционно.
Общедоступное облако: облачная инфраструктура доступна широкой общественности или крупной промышленной группе и принадлежит организации, продающей облачные сервисы.
Гибридное облако: облачная инфраструктура представляет собой совокупность двух или более облаков (частных, коммунальных или общедоступных), которые остаются уникальными образованиями, но объединены стандартизированной или фирменной технологией, обеспечивающей возможность переноса данных и приложений (например, технология cloud bursting для балансировки нагрузки между облаками).
[0067] Облачная среда имеет сервис-ориентированный характер с акцентом на отказ от статичности, низкий уровень привязки, модульность и семантическую совместимость. Ядром облачных вычислений служит инфраструктура, состоящая из сети взаимосвязанных узлов.
[0068] На фиг. 5 показан пример облачной среды 500. Как показано на чертеже, облачная среда 500 содержит один или более узлов облака 10, с которыми могут взаимодействовать локальные вычислительные устройства, используемые потребителями облака, например, карманный персональный компьютер (КПК) или сотовый телефон 54А, настольный компьютер 54В, ноутбук 54С и/или автомобильная компьютерная система 54N. Узлы облака 10 могут взаимодействовать друг с другом. Они могут быть сгруппированы (не показано на рисунке) физически или виртуально, в одной или более сетях, например, в частных, коммунальных, общедоступных или гибридных облаках, как описано выше, или в их комбинации. Благодаря этому облачная среда 500 может предлагать инфраструктуру, платформы и/или программное обеспечение в качестве сервисов, при использовании которых потребителю облака не требуется поддерживать ресурсы на локальном вычислительном устройстве. Следует иметь в виду, что типы вычислительных устройств 54A-N на фиг. 5 приведены только для примера и что узлы облака 10 и облачная среда 500 могут взаимодействовать с компьютерными устройствами любого типа по сети и/или посредством сетевого адресного подключения любого типа (например с помощью веб-браузера).
[0069] На фиг. 6 показан набор функциональных уровней абстракции 600, предоставляемых облачной средой 500 (фиг. 5). Следует оговориться, что компоненты, уровни и функции, показанные на фиг. 6, приведены только для примера и не ограничивают варианты осуществления изобретения. Как показано на чертеже, предусмотрены следующие уровни и соответствующие им функции:
[0070] Аппаратно-программный уровень 60 состоит из аппаратных и программных компонентов. Примерами аппаратных компонентов могут служить: мэйнфреймы 61; серверы на базе архитектуры RISC (Reduced Instruction Set Computer, компьютер с сокращенным набором команд) 62; серверы 63; блейд-серверы 64; запоминающие устройства 65; сети и сетевые компоненты 66. В некоторых вариантах осуществления программные компоненты включают в себя программное обеспечение сетевого сервера приложений 67 и программное обеспечение базы данных 68.
[0071] Уровень виртуализации 70 обеспечивает уровень абстракции, на котором могут быть созданы следующие примеры виртуальных объектов: виртуальные серверы 71; виртуальные хранилища 72; виртуальные сети 73, включая виртуальные частные сети; виртуальные приложения и операционные системы 74; виртуальные клиенты 75.
[0072] В одном примере уровень управления 80 может обеспечивать описанные ниже функции. Подготовка ресурсов 81 обеспечивает динамическое выделение вычислительных и иных ресурсов, которые используются для выполнения задач в облачной среде. Учет и ценообразование 82 обеспечивают отслеживание затрат по мере использования ресурсов в облачной среде, а также тарификацию или выставление счетов за потребление этих ресурсов. В одном примере эти ресурсы могут включать в себя лицензии на прикладное программное обеспечение. Система безопасности обеспечивает проверку удостоверений потребителей и задач облака, а также защиту данных и других ресурсов. Пользовательский портал 83 обеспечивает доступ к облачной среде потребителям и системным администраторам. Управление уровнем обслуживания 84 обеспечивает распределение облачных ресурсов и управление ими таким образом, чтобы соблюдать требуемые уровни обслуживания. Планирование и выполнение соглашений об уровне обслуживания (SLA, Service Level Agreement) 85 обеспечивает предварительную оценку и приобретение облачных ресурсов, потребность в которых ожидается в соответствии с SLA.
[0073] Уровень рабочих нагрузок 90 предлагает примеры функциональных возможностей, для которых может быть использована облачная среда. На этом уровне могут быть предоставлены следующие рабочие нагрузки и функции: картирование и навигация 91; разработка и управление жизненным циклом программного обеспечения 92; организация виртуального учебного класса 93; аналитическая обработка данных 94; обработка транзакций 95; кодирование облака точек 96. Кодирование облака точек 96 может декодировать данные облака точек на основе корреляции между компонентами.
[0074] Некоторые варианты осуществления изобретения могут относиться к системе, способу и/или машиночитаемому носителю с интеграцией на любом возможном уровне технической детализации. Машиночитаемый носитель может содержать машиночитаемый носитель информации (или носители), на котором записаны машиночитаемые программные инструкции, под управлением которых процессор может выполнять операции.
[0075] Машиночитаемый носитель информации может быть физическим устройством, где могут храниться инструкции, которые выполняет устройство выполнения инструкций. Машиночитаемый носитель информации может быть, в частности, электронным запоминающим устройством, магнитным запоминающим устройством, оптическим запоминающим устройством, электромагнитным запоминающим устройством, полупроводниковым запоминающим устройством или любой подходящей комбинацией вышеперечисленных устройств. Неисчерпывающий перечень более конкретных примеров машиночитаемого носителя информации включает в себя следующие устройства: портативную компьютерную дискету, жесткий диск, оперативное запоминающее устройство (ОЗУ), постоянное запоминающее устройство (ПЗУ), стираемую программируемую память только для чтения (EPROM или флэш-память), статическое ОЗУ (СОЗУ), портативный компакт-диск только для чтения (CD-ROM), цифровой универсальный диск (DVD), карту памяти, дискету, устройство с механическим кодированием, например перфокарты или рельефные поверхностные структуры, на которых записаны инструкции, а также любую подходящую комбинацию перечисленных выше устройств. Под машиночитаемым носителем информации настоящем документе не подразумеваются сигналы как таковые, в частности, радиоволны или другие свободно распространяющиеся электромагнитные волны, электромагнитные волны, распространяющиеся по волноводу или в другой среде передачи (например световые импульсы, передаваемые по волоконно-оптическому кабелю), или электрические сигналы, передаваемые по проводам.
[0076] Описанные в настоящем документе машиночитаемые программные инструкции могут загружаться в соответствующие вычислительные или обрабатывающие устройства с машиночитаемого носителя информации или на внешний компьютер или внешнее запоминающее устройство по сети, например, по Интернету, локальной сети, глобальной сети и/или беспроводной сети. Сеть может быть построена на основе медных кабелей, оптических волокон, беспроводных средств передачи данных, маршрутизаторов, межсетевых экранов, коммутаторов, шлюзовых компьютеров и/или периферийных серверов. Плата сетевого адаптера или сетевой интерфейс в каждом вычислительном или обрабатывающем устройстве принимает машиночитаемые программные инструкции из сети и пересылает на хранение в машиночитаемый носитель информации в соответствующем вычислительном или обрабатывающем устройстве.
[0077] Машиночитаемый программный код или инструкции для выполнения операций могут быть командами ассемблера, командами архитектуры набора команд (ISA), машинными командами, машинозависимыми командами, микрокодом, командами микропрограммы, данными установки состояния, данными конфигурации для интегральных схем либо исходным или объектным кодом, написанными на любой комбинации из одного или более языков программирования, включая объектно-ориентированные языки программирования, например Smalltalk, С++ или аналогичные им, а также процедурные языки программирования, например язык программирования "С" или аналогичные языки программирования. Машиночитаемые программные инструкции могут выполняться на компьютере пользователя полностью или частично, как отдельный программный пакет, частично на компьютере пользователя и частично на удаленном компьютере либо полностью на удаленном компьютере или сервере. В последнем варианте удаленный компьютер может быть подключен к компьютеру пользователя через сеть любого типа, включая локальную сеть (LAN) или глобальную сеть (WAN), либо можно использовать подключение к внешнему компьютеру (например, через Интернет с помощью интернет-провайдера). В некоторых вариантах осуществления выполнять машиночитаемые программные инструкции могут электронные схемы, в том числе программируемые логические схемы, программируемые логические интегральные схемы (FPGA) или программируемые логические матрицы (PLA, programmable logic array), используя информацию о состоянии машиночитаемых программных команд для персонализации электронной схемы с целью выполнения определенных аспектов или операций.
[0078] Эти машиночитаемые программные инструкции могут быть переданы в процессор компьютера общего назначения, в компьютер специального назначения или в другое программируемое устройство обработки данных для формирования машины таким образом, чтобы инструкции, выполняемые процессором компьютера или другого программируемого устройства обработки данных, создавали средства для реализации функций или действий, указанных на блоках блок-схемы и/или структурной схемы. Эти машиночитаемые программные инструкции могут также храниться на машиночитаемом носителе информации, который может предписывать компьютеру, программируемому устройству обработки данных и/или другим устройствам функционировать определенным образом, причем машиночитаемый носитель информации с записанными на нем инструкциями представляет собой изделие, включающее в себя инструкции, реализующие определенные аспекты функции или действий, указанных на блоках блок-схемы и/или структурной схемы.
[0079] Машиночитаемые программные инструкции могут также загружаться в компьютер, другое программируемое устройство обработки данных или иное устройство, чтобы инициировать выполнение ряда операционных действий на компьютере, другом программируемом устройстве или ином устройстве для получения реализованной на компьютере процедуры, причем инструкции, выполняемые на компьютере, другом программируемом устройстве или ином устройстве, реализуют функции или действия, указанные на блоках блок-схемы и/или структурной схемы.
[0080] Приведенные на чертежах блок-схемы и структурные схемы иллюстрируют архитектуру, функциональные возможности и работу возможных реализаций систем, способов и машиночитаемых носителей согласно различным вариантам осуществления изобретения. В связи с этим, каждый блок блок-схемы или структурной схемы может соответствовать модулю, сегменту или части инструкций, которые включают в себя одну или более исполняемых инструкций для реализации заданных логических функций. Способ, компьютерная система и машиночитаемый носитель могут содержать дополнительные блоки, меньшее количество блоков, другие блоки или иначе организованные блоки, нежели те, что изображены на чертежах. В некоторых альтернативных вариантах реализации указанные на блоках функции могут выполняться не в том порядке, который указан на чертежах. Например, два блока, изображенные последовательно, на практике могут выполняться одновременно или практически одновременно, а иногда блоки могут выполняться в обратном порядке в зависимости от используемых функциональных возможностей. Следует также отметить, что каждый блок структурной схемы и/или блок-схемы, а также комбинации блоков структурной схемы и/или блок-схемы могут быть реализованы специализированными аппаратными системами, которые выполняют указанные функции или действия либо реализуют комбинации инструкций для специализированных аппаратных средств и компьютеров.
[0081] Следует понимать, что описанные в настоящем документе системы и/или способы могут быть реализованы посредством различных форм аппаратных средств, микропрограммного обеспечения или комбинации аппаратных средств и программного обеспечения. Фактическое специализированное управляющее оборудование или программный код, используемые для реализации этих систем и/или способов, не ограничивают варианты реализации. Поэтому работа и поведение систем и/или способов описываются в настоящем документе без ссылки на конкретный программный код; при этом подразумевается, что программное обеспечение и аппаратные средства могут быть разработаны для реализации систем и/или способов на основе приведенного в настоящем документе описания.
[0082] Никакие элементы, действия или инструкции, используемые в настоящем документе, не следует рассматривать как критически важные или существенные, если это не оговорено в явном виде. Кроме того, понятия, используемые в настоящем документе в единственном числе, могут подразумевать один или более экземпляров и могут использоваться взаимозаменяемо с выражением «один или более». Также в настоящем документе понятие «набор» используется для обозначения одного или более элементов (например, связанных элементов, несвязанных элементов, комбинации связанных и несвязанных предметов и т.д.) и может использоваться взаимозаменяемо с выражением «один или более». Если имеется в виду только один элемент, то используется понятие «один» или аналогичная формулировка. Кроме того, используемые в настоящем документе понятия «имеет», «имеют», «имеющий» и т.п. являются неограничивающими понятиями. Кроме того, формулировка «на основе» означает «по меньшей мере частично на основе», если явно не оговорено иное.
[0083] Описания различных аспектов и вариантов осуществления представлены для наглядности и не исчерпывают и не ограничивают раскрытые варианты осуществления. Даже если в формуле изобретения и/или в описании приводятся комбинации признаков, такие комбинации не ограничивают возможные варианты осуществления. На практике многие из этих признаков можно объединять различными способами, которые отдельно не упоминаются в формуле изобретения и/или не раскрыты в описании. Хотя каждый приведенный ниже зависимый пункт формулы может напрямую зависеть только от одного пункта, при раскрытии возможных вариантов осуществления каждый зависимый пункт рассматривается в комбинации со всеми остальными пунктами формулы. Специалистам в данной области техники будут понятны разнообразные модификации и варианты, не выходящие за рамки описанных вариантов осуществления изобретения. Используемая в настоящем документе терминология выбрана с целью наилучшего разъяснения принципов осуществления, практического применения или технического усовершенствования по сравнению с существующими на рынке технологиями, а также для того, чтобы другие специалисты в данной области техники могли понять раскрытые здесь варианты осуществления.