labelme分割农田
时间: 2025-05-18 12:09:15 AIGC 浏览: 43
### 使用 LabelMe 实现农田图像分割
LabelMe 是一种功能强大的开源工具,专为图像标注设计,支持多种类型的标注任务,包括边界框、多边形、线段和点等。对于农田图像分割任务,可以利用其多边形标注功能来精确描绘田地的形状[^1]。
#### 安装与配置
首先需要安装 LabelMe 工具。可以通过 Python 的 pip 包管理器进行安装:
```bash
pip install labelme
```
启动 LabelMe 可执行文件后,会进入图形界面操作模式。在此过程中,可以选择要标注的图像文件夹路径,并逐一加载待处理的图片。
#### 图像分割的具体流程
在农田图像分割场景下,主要涉及以下几个核心环节:
1. **加载图像**
将农田区域的相关图像导入到 LabelMe 中。每张图像会被单独显示以便于后续的操作。
2. **定义类别**
在软件界面上方设置好对应的标签名称(例如,“农田”、“道路”或其他背景类)。这一步骤决定了最终生成 JSON 文件中的 `label` 字段内容[^3]。
3. **手动绘制多边形**
对于每一幅输入影像,采用鼠标点击的方式沿实际地块边缘依次放置顶点形成闭合曲线;如果遇到复杂地形,则可能需要用到更多节点才能准确表达轮廓特征。完成后确认保存当前工作成果至本地磁盘作为临时记录文件(.json)。
4. **导出数据集**
所有样本均按照上述方法完成初步加工之后,还需要进一步整理成为适合深度神经网络框架读取的标准格式,比如 COCO 或 Pascal VOC 等通用协议所规定的样式。此时可借助额外脚本来批量转换已有的标注信息。
#### 自动化辅助手段
尽管手工方式简单明了,但对于大规模的数据集来说效率较低。为此也可以考虑引入部分智能化算法降低劳动强度,例如基于模板匹配寻找相似图案位置自动生成初始猜测供修正参考;或者运用预训练好的卷积层提取高层次语义特性指导快速定位感兴趣区等等[^2]。
---
### 示例代码片段
下面给出一段简单的 Python 脚本用来演示如何把由 LabelMe 创建出来的 json 数据解析出来并转化为 numpy 数组形式表示 mask 掩码矩阵:
```python
import base64
from PIL import Image
import io
import numpy as np
import labelme.utils.image as img_utils
def shape_to_mask(img_shape, points):
"""Converts a list of point coordinates into binary masks."""
from skimage.draw import polygon
rr, cc = polygon([p[1] for p in points], [p[0] for p in points])
mask = np.zeros((img_shape[0], img_shape[1]), dtype=np.uint8)
mask[rr, cc] = 1
return mask
# Load the image and its corresponding annotation file.
image_path = 'path/to/your/image.jpg'
annotation_file = 'path/to/your/image.json'
data = labelme.LabelFile.load(annotation_file)
# Decode Base64 encoded PNG data back to an array.
if isinstance(data['imageData'], str):
imageData = base64.b64decode(data['imageData'])
else:
imageData = data['imageData']
img_pil = Image.open(io.BytesIO(imageData))
img_np = np.array(img_pil)
for shape in data['shapes']:
label = shape["label"]
mask = shape_to_mask(img_np.shape[:2], shape["points"])
# Now you have both the original image (`img_np`) and the segmentation mask (`mask`)
print(f"Processed {label} with mask size: {mask.shape}")
```
此函数接受两个参数——一个是原始 RGB 彩色照片尺寸大小元组 `(height,width)` ,另一个是由若干二维坐标组成的列表代表封闭折线各个端点座标集合 。返回值则是一副布尔型数值构成的新数组其中对应区域内元素全设为了 True 值其余保持 False 不变从而实现了二值化的掩蔽效果。
---
阅读全文
相关推荐












