اشیاء تصویر مجموعهای از پیکسلهای متصل هستند که مقدار صحیح یکسانی دارند. دادههای تصویری طبقهبندیشده، binned و boolean برای تحلیل شی مناسب هستند.
Earth Engine روش هایی را برای برچسب زدن هر شی با یک شناسه منحصر به فرد، شمارش تعداد پیکسل های سازنده اشیاء، و محاسبه ��مار برای مقادیر پیکسل هایی که اجسام را قطع می کنند، ارائه می دهد.
-
connectedComponents()
: هر شی را با یک شناسه منحصر به فرد برچسب گذاری کنید. -
connectedPixelCount()
: تعداد پیکسل ها را در هر شی محاسبه کنید. -
reduceConnectedComponents()
: یک آمار برای پیکسل ها در هر شی محاسبه کنید.
نقاط داغ حرارتی
بخشهای زیر نمونههایی از روشهای مبتنی بر شی را ارائه میدهند که برای دمای سطح Landsat 8 با هر بخش ساخته شده بر روی اولی اعمال میشوند. قطعه بعدی را برای ایجاد تصویر پایه اجرا کنید: نقاط داغ حرارتی (> 303 درجه کلوین) برای منطقه کوچکی از سانفرانسیسکو.
ویرایشگر کد (جاوا اسکریپت)
// Make an area of interest geometry centered on San Francisco. var point = ee.Geometry.Point(-122.1899, 37.5010); var aoi = point.buffer(10000); // Import a Landsat 8 image, subset the thermal band, and clip to the // area of interest. var kelvin = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318') .select(['B10'], ['kelvin']) .clip(aoi); // Display the thermal band. Map.centerObject(point, 13); Map.addLayer(kelvin, {min: 288, max: 305}, 'Kelvin'); // Threshold the thermal band to set hot pixels as value 1, mask all else. var hotspots = kelvin.gt(303) .selfMask() .rename('hotspots'); // Display the thermal hotspots on the Map. Map.addLayer(hotspots, {palette: 'FF0000'}, 'Hotspots');
import ee import geemap.core as geemap
کولب (پایتون)
# Make an area of interest geometry centered on San Francisco. point = ee.Geometry.Point(-122.1899, 37.5010) aoi = point.buffer(10000) # Import a Landsat 8 image, subset the thermal band, and clip to the # area of interest. kelvin = ( ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318') .select(['B10'], ['kelvin']) .clip(aoi) ) # Threshold the thermal band to set hot pixels as value 1, mask all else. hotspots = kelvin.gt(303).selfMask().rename('hotspots') # Define a map centered on Redwood City, California. map_objects = geemap.Map(center=[37.5010, -122.1899], zoom=13) # Add the image layers to the map. map_objects.add_layer(kelvin, {'min': 288, 'max': 305}, 'Kelvin') map_objects.add_layer(hotspots, {'palette': 'FF0000'}, 'Hotspots')

شکل 1. درجه حرارت برای منطقه ای از سانفرانسیسکو. پیکسل هایی با دمای بیشتر از 303 درجه کلوین با رنگ قرمز (نقاط گرمایی) متمایز می شوند.
برچسب زدن به اشیاء
برچسب گذاری اشیا اغلب اولین گام در تجزیه و تحلیل اشیا است. در اینجا، تابع connectedComponents()
برای شناسایی اشیاء تصویر و اختصاص یک شناسه منحصر به فرد به هر کدام استفاده می شود. به تمام پیکسل های متعلق به یک شی، یک مقدار عدد صحیح شناسه اختصاص داده می شود. نتیجه یک کپی از تصویر ورودی با یک باند "برچسب" اضافی است که پیکسل ها را با یک مقدار شناسه شی بر اساس اتصال پیکسل ها در باند اول تصویر مرتبط می کند.
ویرایشگر کد (جاوا اسکریپت)
// Uniquely label the hotspot image objects. var objectId = hotspots.connectedComponents({ connectedness: ee.Kernel.plus(1), maxSize: 128 }); // Display the uniquely ID'ed objects to the Map. Map.addLayer(objectId.randomVisualizer(), null, 'Objects');
import ee import geemap.core as geemap
کولب (پایتون)
# Uniquely label the hotspot image objects. object_id = hotspots.connectedComponents( connectedness=ee.Kernel.plus(1), maxSize=128 ) # Add the uniquely ID'ed objects to the map. map_objects.add_layer(object_id.randomVisualizer(), None, 'Objects')
توجه داشته باشید که حداکثر اندازه پچ روی 128 پیکسل تنظیم شده است. اشیایی که از پیکسل های بیشتری تشکیل شده اند ماسک می شوند. اتصال توسط یک هسته ee.Kernel.plus(1)
مشخص می شود که اتصال چهار همسایه را تعریف می کند. از ee.Kernel.square(1)
برای هشت همسایه استفاده کنید.

شکل 2. اشیاء کانون حرارتی برچسب گذاری شده و با یک شناسه منحصر به فرد استایل دهی شده اند.
اندازه شی
تعداد پیکسل ها
با استفاده از متد تصویر connectedPixelCount()
تعداد پیکسلهای تشکیل دهنده اشیاء را محاسبه کنید. دانستن تعداد پیکسل ها در یک شی می تواند برای پوشاندن اشیاء بر اساس اندازه و محاسبه مساحت شی مفید باشد. قطعه زیر connectedPixelCount()
را به باند "labels" تصویر objectId
که در بخش قبل تعریف شده است اعمال می کند.
ویرایشگر کد (جاوا اسکریپت)
// Compute the number of pixels in each object defined by the "labels" band. var objectSize = objectId.select('labels') .connectedPixelCount({ maxSize: 128, eightConnected: false }); // Display object pixel count to the Map. Map.addLayer(objectSize, null, 'Object n pixels');
import ee import geemap.core as geemap
کولب (پایتون)
# Compute the number of pixels in each object defined by the "labels" band. object_size = object_id.select('labels').connectedPixelCount( maxSize=128, eightConnected=False ) # Add the object pixel count to the map. map_objects.add_layer(object_size, None, 'Object n pixels')
connectedPixelCount()
یک کپی از تصویر ورودی را برمی گرداند که در آن هر پیکسل از هر باند شامل تعداد همسایه های متصل مطابق با ��انون اتصال چهار یا هشت همسایه است که توسط آرگومان بولی ارسال شده به پارامتر eightConnected
تعیین می شود. توجه داشته باشید که اتصال به طور مستقل برای هر باند تصویر ورودی تعیین می شود. در این مثال، یک تصویر تک باندی ( objectId
) که شناسه شیء را نشان میدهد به عنوان ورودی ارائه شده است، بنابراین یک تصویر تک باندی با یک باند "برچسبها" (در تصویر ورودی به این صورت وجود دارد) برگردانده شد، اما اکنون مقادیر نشاندهنده تعداد پیکسلهایی هستند که اشیاء را تشکیل میدهند. هر پیکسل از هر شی مقدار تعداد پیکسل یکسانی خواهد داشت.

شکل 3. اشیاء کانون حرارتی برچسبگذاری شده و بر اساس اندازه شکلبندی شدهاند.
منطقه
مساحت شی را با ضرب مساحت یک پیکسل در تعداد پیکسل های تشکیل دهنده یک شی محاسبه کنید (تعیین شده توسط connectedPixelCount()
). ناحیه پیکسل توسط یک تصویر تولید شده از ee.Image.pixelArea()
ارائه می شود.
ویرایشگر کد (جاوا اسکریپت)
// Get a pixel area image. var pixelArea = ee.Image.pixelArea(); // Multiply pixel area by the number of pixels in an object to calculate // the object area. The result is an image where each pixel // of an object relates the area of the object in m^2. var objectArea = objectSize.multiply(pixelArea); // Display object area to the Map. Map.addLayer(objectArea, {min: 0, max: 30000, palette: ['0000FF', 'FF00FF']}, 'Object area m^2');
import ee import geemap.core as geemap
کولب (پایتون)
# Get a pixel area image. pixel_area = ee.Image.pixelArea() # Multiply pixel area by the number of pixels in an object to calculate # the object area. The result is an image where each pixel # of an object relates the area of the object in m^2. object_area = object_size.multiply(pixel_area) # Add the object area to the map. map_objects.add_layer( object_area, {'min': 0, 'max': 30000, 'palette': ['0000FF', 'FF00FF']}, 'Object area m^2', )
نتیجه تصویری است که در آن هر پیکسل از یک جسم مساحت جسم را به متر مربع مرتبط می کند. در این مثال، تصویر objectSize
شامل یک باند است، اگر چند باندی بود، عملیات ضرب برای هر باند از تصویر اعمال می شد.
اشیاء را بر اساس اندازه فیلتر کنید
اندازه شی را می توان به عنوان یک شرط ماسک برای تمرکز تجزیه و تحلیل خود بر روی اشیاء با اندازه خاص استفاده کرد (مثلاً اشیایی که خیلی کوچک هستند را پنهان کنید). در اینجا از تصویر objectArea
محاسبه شده در مرحله قبل به عنوان ماسک برای حذف اشیایی که مساحت آنها کمتر از یک هکتار است استفاده می شود.
ویرایشگر کد (جاوا اسکریپت)
// Threshold the `objectArea` image to define a mask that will mask out // objects below a given size (1 hectare in this case). var areaMask = objectArea.gte(10000); // Update the mask of the `objectId` layer defined previously using the // minimum area mask just defined. objectId = objectId.updateMask(areaMask); Map.addLayer(objectId, null, 'Large hotspots');
import ee import geemap.core as geemap
کولب (پایتون)
# Threshold the `object_area` image to define a mask that will mask out # objects below a given size (1 hectare in this case). area_mask = object_area.gte(10000) # Update the mask of the `object_id` layer defined previously using the # minimum area mask just defined. object_id = object_id.updateMask(area_mask) map_objects.add_layer(object_id, None, 'Large hotspots')
نتیجه یک کپی از تصویر objectId
است که در آن اشیاء کمتر از یک هکتار پنهان شده اند.
![]() | ![]() |
---|---|
شکل 4 الف. اشیاء کانون حرارتی برچسبگذاری شده و با شناسه منحصربهفرد استایلگذاری شدهاند. | شکل 4b. اشیاء کانون حرارتی با حداقل مساحت (1 هکتار) فیلتر شده اند. |
آمار منطقه ای
متد reduceConnectedComponents()
یک کاهنده را برای پیکسل هایی که اشیاء منحصر به فرد را تشکیل می دهند اعمال می کند. قطعه زیر از آن برای محاسبه میانگین دمای اجسام هات اسپات استفاده می کند. reduceConnectedComponents()
نیاز به یک تصویر ورودی با یک باند (یا باندها) کاهش میدهد و باندی که برچسبهای شی را تعریف میکند. در اینجا، باند تصویر objectID
"labels" به تصویر دمای kelvin
اضافه می شود تا یک تصویر ورودی مناسب ایجاد شود.
ویرایشگر کد (جاوا اسکریپت)
// Make a suitable image for `reduceConnectedComponents()` by adding a label // band to the `kelvin` temperature image. kelvin = kelvin.addBands(objectId.select('labels')); // Calculate the mean temperature per object defined by the previously added // "labels" band. var patchTemp = kelvin.reduceConnectedComponents({ reducer: ee.Reducer.mean(), labelBand: 'labels' }); // Display object mean temperature to the Map. Map.addLayer( patchTemp, {min: 303, max: 304, palette: ['yellow', 'red']}, 'Mean temperature' );
import ee import geemap.core as geemap
کولب (پایتون)
# Make a suitable image for `reduceConnectedComponents()` by adding a label # band to the `kelvin` temperature image. kelvin = kelvin.addBands(object_id.select('labels')) # Calculate the mean temperature per object defined by the previously added # "labels" band. patch_temp = kelvin.reduceConnectedComponents( reducer=ee.Reducer.mean(), labelBand='labels' ) # Add object mean temperature to the map and display it. map_objects.add_layer( patch_temp, {'min': 303, 'max': 304, 'palette': ['yellow', 'red']}, 'Mean temperature', ) display(map_objects)
نتیجه یک کپی از تصویر ورودی بدون نوار مورد استفاده برای تعریف اشیاء است، که در آن مقادیر پیکسل نشان دهنده نتیجه کاهش در هر شی، در هر باند است.

شکل 5. پیکسل های شی نقطه گرمایی که با میانگین دما خلاصه شده و استایل بندی شده اند. ،
اشیاء تصویر مجموعهای از پیکسلهای متصل هستند که مقدار صحیح یکسانی دارند. دادههای تصویری طبقهبندیشده، binned و boolean برای تحلیل شی مناسب هستند.
Earth Engine روش هایی را برای برچسب زدن هر شی با یک شناسه منحصر به فرد، شمارش تعداد پیکسل های سازنده اشیاء، و محاسبه آمار برای مقادیر پیکسل هایی که اجسام را قطع می کنند، ارائه می دهد.
-
connectedComponents()
: هر شی را با یک شناسه منحصر به فرد برچسب گذاری کنید. -
connectedPixelCount()
: تعداد پیکسل ها را در هر شی محاسبه کنید. -
reduceConnectedComponents()
: یک آمار برای پیکسل ها در هر شی محاسبه کنید.
نقاط داغ حرارتی
بخشهای زیر نمونههایی از روشهای مبتنی بر شی را ارائه میدهند که برای دمای سطح Landsat 8 با هر بخش ساخته شده بر روی اولی اعمال میشوند. قطعه بعدی را برای ایجاد تصویر پایه اجرا کنید: نقاط داغ حرارتی (> 303 درجه کلوین) برای منطقه کوچکی از سانفرانسیسکو.
ویرایشگر کد (جاوا اسکریپت)
// Make an area of interest geometry centered on San Francisco. var point = ee.Geometry.Point(-122.1899, 37.5010); var aoi = point.buffer(10000); // Import a Landsat 8 image, subset the thermal band, and clip to the // area of interest. var kelvin = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318') .select(['B10'], ['kelvin']) .clip(aoi); // Display the thermal band. Map.centerObject(point, 13); Map.addLayer(kelvin, {min: 288, max: 305}, 'Kelvin'); // Threshold the thermal band to set hot pixels as value 1, mask all else. var hotspots = kelvin.gt(303) .selfMask() .rename('hotspots'); // Display the thermal hotspots on the Map. Map.addLayer(hotspots, {palette: 'FF0000'}, 'Hotspots');
import ee import geemap.core as geemap
کولب (پایتون)
# Make an area of interest geometry centered on San Francisco. point = ee.Geometry.Point(-122.1899, 37.5010) aoi = point.buffer(10000) # Import a Landsat 8 image, subset the thermal band, and clip to the # area of interest. kelvin = ( ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_044034_20140318') .select(['B10'], ['kelvin']) .clip(aoi) ) # Threshold the thermal band to set hot pixels as value 1, mask all else. hotspots = kelvin.gt(303).selfMask().rename('hotspots') # Define a map centered on Redwood City, California. map_objects = geemap.Map(center=[37.5010, -122.1899], zoom=13) # Add the image layers to the map. map_objects.add_layer(kelvin, {'min': 288, 'max': 305}, 'Kelvin') map_objects.add_layer(hotspots, {'palette': 'FF0000'}, 'Hotspots')

شکل 1. درجه حرارت برای منطقه ای از سانفرانسیسکو. پیکسل هایی با دمای بیشتر از 303 درجه کلوین با رنگ قرمز (نقاط گرمایی) متمایز می شوند.
برچسب زدن به اشیاء
برچسب گذاری اشیا اغلب اولین گام در تجزیه و تحلیل اشیا است. در اینجا، تابع connectedComponents()
برای شناسایی اشیاء تصویر و اختصاص یک شناسه منحصر به فرد به هر کدام استفاده می شود. به تمام پیکسل های متعلق به یک شی، یک مقدار عدد صحیح شناسه اختصاص داده می شود. نتیجه یک کپی از تصویر ورودی با یک باند "برچسب" اضافی است که پیکسل ها را با یک مقدار شناسه شی بر اساس اتصال پیکسل ها در باند اول تصویر مرتبط می کند.
ویرایشگر کد (جاوا اسکریپت)
// Uniquely label the hotspot image objects. var objectId = hotspots.connectedComponents({ connectedness: ee.Kernel.plus(1), maxSize: 128 }); // Display the uniquely ID'ed objects to the Map. Map.addLayer(objectId.randomVisualizer(), null, 'Objects');
import ee import geemap.core as geemap
کولب (پایتون)
# Uniquely label the hotspot image objects. object_id = hotspots.connectedComponents( connectedness=ee.Kernel.plus(1), maxSize=128 ) # Add the uniquely ID'ed objects to the map. map_objects.add_layer(object_id.randomVisualizer(), None, 'Objects')
توجه داشته باشید که حداکثر اندازه پچ روی 128 پیکسل تنظیم شده است. اشیایی که از پیکسل های بیشتری تشکیل شده اند ماسک می شوند. اتصال توسط یک هسته ee.Kernel.plus(1)
مشخص می شود که اتصال چهار همسایه را تعریف می کند. از ee.Kernel.square(1)
برای هشت همسایه استفاده کنید.

شکل 2. اشیاء کانون حرارتی برچسب گذاری شده و با یک شناسه منحصر به فرد استایل دهی شده اند.
اندازه شی
تعداد پیکسل ها
با استفاده از متد تصویر connectedPixelCount()
تعداد پیکسلهای تشکیل دهنده اشیاء را محاسبه کنید. دانستن تعداد پیکسل ها در یک شی می تواند برای پوشاندن اشیاء بر اساس اندازه و محاسبه مساحت شی مفید باشد. قطعه زیر connectedPixelCount()
را به باند "labels" تصویر objectId
که در بخش قبل تعریف شده است اعمال می کند.
ویرایشگر کد (جاوا اسکریپت)
// Compute the number of pixels in each object defined by the "labels" band. var objectSize = objectId.select('labels') .connectedPixelCount({ maxSize: 128, eightConnected: false }); // Display object pixel count to the Map. Map.addLayer(objectSize, null, 'Object n pixels');
import ee import geemap.core as geemap
کولب (پایتون)
# Compute the number of pixels in each object defined by the "labels" band. object_size = object_id.select('labels').connectedPixelCount( maxSize=128, eightConnected=False ) # Add the object pixel count to the map. map_objects.add_layer(object_size, None, 'Object n pixels')
connectedPixelCount()
یک کپی از تصویر ورودی را برمی گرداند که در آن هر پیکسل از هر باند شامل تعداد همسایه های متصل مطابق با قانون اتصال چهار یا هشت همسایه است که توسط آرگومان بولی ارسال شده به ��ارامتر eightConnected
تعیین می شود. توجه داشته باشید که اتصال به طور مستقل برای هر باند تصویر ورودی تعیین می شود. در این مثال، یک تصویر تک باندی ( objectId
) که شناسه شیء را نشان میدهد به عنوان ورودی ارائه شده است، بنابراین یک تصویر تک باندی با یک باند "برچسبها" (در تصویر ورودی به این صورت وجود دارد) برگردانده شد، اما اکنون مقادیر نشاندهنده تعداد پیکسلهایی هستند که اشیاء را تشکیل میدهند. هر پیکسل از هر شی مقدار تعداد پیکسل یکسانی خواهد داشت.

شکل 3. اشیاء کانون حرارتی برچسبگذاری شده و بر اساس اندازه شکلبندی شدهاند.
منطقه
مساحت شی را با ضرب مساحت یک پیکسل در تعداد پیکسل های تشکیل دهنده یک شی محاسبه کنید (تعیین شده توسط connectedPixelCount()
). ناحیه پیکسل توسط یک تصویر تولید شده از ee.Image.pixelArea()
ارائه می شود.
ویرایشگر کد (جاوا اسکریپت)
// Get a pixel area image. var pixelArea = ee.Image.pixelArea(); // Multiply pixel area by the number of pixels in an object to calculate // the object area. The result is an image where each pixel // of an object relates the area of the object in m^2. var objectArea = objectSize.multiply(pixelArea); // Display object area to the Map. Map.addLayer(objectArea, {min: 0, max: 30000, palette: ['0000FF', 'FF00FF']}, 'Object area m^2');
import ee import geemap.core as geemap
کولب (پایتون)
# Get a pixel area image. pixel_area = ee.Image.pixelArea() # Multiply pixel area by the number of pixels in an object to calculate # the object area. The result is an image where each pixel # of an object relates the area of the object in m^2. object_area = object_size.multiply(pixel_area) # Add the object area to the map. map_objects.add_layer( object_area, {'min': 0, 'max': 30000, 'palette': ['0000FF', 'FF00FF']}, 'Object area m^2', )
نتیجه تصویری است که در آن هر پیکسل از یک جسم مساحت جسم را به متر مربع مرتبط می کند. در این مثال، تصویر objectSize
شامل یک باند است، اگر چند باندی بود، عملیات ضرب برای هر باند از تصویر اعمال می شد.
اشیاء را بر اساس اندازه فیلتر کنید
اندازه شی را می توان به عنوان یک شرط ماسک برای تمرکز تجزیه و تحلیل خود بر روی اشیاء با اندازه خاص استفاده کرد (مثلاً اشیایی که خیلی کوچک هستند را پنهان کنید). در اینجا از تصویر objectArea
محاسبه شده در مرحله قبل به عنوان ماسک برای حذف اشیایی که مساحت آنها کمتر از یک هکتار است استفاده می شود.
ویرایشگر کد (جاوا اسکریپت)
// Threshold the `objectArea` image to define a mask that will mask out // objects below a given size (1 hectare in this case). var areaMask = objectArea.gte(10000); // Update the mask of the `objectId` layer defined previously using the // minimum area mask just defined. objectId = objectId.updateMask(areaMask); Map.addLayer(objectId, null, 'Large hotspots');
import ee import geemap.core as geemap
کولب (پایتون)
# Threshold the `object_area` image to define a mask that will mask out # objects below a given size (1 hectare in this case). area_mask = object_area.gte(10000) # Update the mask of the `object_id` layer defined previously using the # minimum area mask just defined. object_id = object_id.updateMask(area_mask) map_objects.add_layer(object_id, None, 'Large hotspots')
نتیجه یک کپی از تصویر objectId
است که در آن اشیاء کمتر از یک هکتار پنهان شده اند.
![]() | ![]() |
---|---|
شکل 4 الف. اشیاء کانون حرارتی برچسبگذاری شده و با شناسه منحصربهفرد استایلگذاری شدهاند. | شکل 4b. اشیاء کانون حرارتی با حداقل مساحت (1 هکتار) فیلتر شده اند. |
آمار منطقه ای
متد reduceConnectedComponents()
یک کاهنده را برای پیکسل هایی که اشیاء منحصر به فرد را تشکیل می دهند اعمال می کند. قطعه زیر از آن برای محاسبه میانگین دمای اجسام هات اسپات استفاده می کند. reduceConnectedComponents()
نیاز به یک تصویر ورودی با یک باند (یا باندها) کاهش میدهد و باندی که برچسبهای شی را تعریف میکند. در اینجا، باند تصویر objectID
"labels" به تصویر دمای kelvin
اضافه می شود تا یک تصویر ورودی مناسب ایجاد شود.
ویرایشگر کد (جاوا اسکریپت)
// Make a suitable image for `reduceConnectedComponents()` by adding a label // band to the `kelvin` temperature image. kelvin = kelvin.addBands(objectId.select('labels')); // Calculate the mean temperature per object defined by the previously added // "labels" band. var patchTemp = kelvin.reduceConnectedComponents({ reducer: ee.Reducer.mean(), labelBand: 'labels' }); // Display object mean temperature to the Map. Map.addLayer( patchTemp, {min: 303, max: 304, palette: ['yellow', 'red']}, 'Mean temperature' );
import ee import geemap.core as geemap
کولب (پایتون)
# Make a suitable image for `reduceConnectedComponents()` by adding a label # band to the `kelvin` temperature image. kelvin = kelvin.addBands(object_id.select('labels')) # Calculate the mean temperature per object defined by the previously added # "labels" band. patch_temp = kelvin.reduceConnectedComponents( reducer=ee.Reducer.mean(), labelBand='labels' ) # Add object mean temperature to the map and display it. map_objects.add_layer( patch_temp, {'min': 303, 'max': 304, 'palette': ['yellow', 'red']}, 'Mean temperature', ) display(map_objects)
نتیجه یک کپی از تصویر ورودی بدون نوار مورد استفاده برای تعریف اشیاء است، که در آن مقادیر پیکسل نشان دهنده نتیجه کاهش در هر شی، در هر باند است.

شکل 5. پیکسل های شی نقطه گرمایی که با میانگین دما خلاصه شده و استایل بندی شده اند.