news 2026/4/18 8:09:29

基于opencv与深度学习Deeplab舌苔分割检测代码及教程 深度学习图像分割 舌苔分割图像数据集

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于opencv与深度学习Deeplab舌苔分割检测代码及教程 深度学习图像分割 舌苔分割图像数据集

深度学习Deeplab舌苔分割检测代码及教程

引言

舌苔分割是中医诊断中的一个重要环节,通过对舌苔的分析可以辅助医生了解患者的健康状况。近年来,深度学习技术在医学图像处理领域取得了显著进展,Deeplab系列模型因其卓越的分割性能而被广泛应用于医学图像分割任务。本文将详细介绍如何使用Deeplab模型进行舌苔分割检测,包括环境搭建、数据准备、模型训练和推理等步骤。

环境搭建

首先,确保你的开发环境已经安装了必要的库。推荐使用Python 3.7或更高版本,并安装以下库:

  • torch
  • OpenCV
  • NumPy
  • Matplotlib
  • TensorFlow Addons (如果需要使用特定的损失函数或优化器)

可以通过以下命令安装这些库:

pipinstalltorch opencv-python-headless numpy matplotlib
数据准备
1. 数据集

你需要一个包含舌苔图像及其对应分割标签的数据集。数据集应包含以下内容:

  • 原始舌苔图像(通常是彩色图像)
  • 对应的分割标签图像(通常是灰度图像,每个像素值表示不同的类别)
2. 数据预处理

数据预处理是提高模型性能的关键步骤。常见的预处理步骤包括:

  • 图像缩放:将图像缩放到统一的大小(例如256x256)。
  • 数据增强:使用随机旋转、翻转、裁剪等方法增加数据多样性。
  • 归一化:将图像像素值归一化到[0, 1]区间。
importcv2importnumpyasnpfromtensorflow.keras.preprocessing.imageimportImageDataGeneratordefpreprocess_image(image_path,target_size=(256,256)):image=cv2.imread(image_path)image=cv2.resize(image,target_size)image=image/255.0# 归一化returnimagedefpreprocess_mask(mask_path,target_size=(256,256)):mask=cv2.imread(mask_path,cv2.IMREAD_GRAYSCALE)mask=cv2.resize(mask,target_size)mask=np.expand_dims(mask,axis=-1)# 添加通道维度returnmask# 数据增强data_gen_args=dict(rotation_range=10,width_shift_range=0.1,height_shift_range=0.1,shear_range=0.1,zoom_range=0.˜,horizontal_flip=True,fill_mode='nearest')image_datagen=ImageDataGenerator(**data_gen_args)mask_datagen=ImageDataGenerator(**data_gen_args)# 创建生成器defgenerator(batch_size,image_paths,mask_paths):whileTrue:batch_images=[]batch_masks=[]foriinrange(batch_size):idx=np.random.randint(len(image_paths))image=preprocess_image(image_paths[idx])mask=preprocess_mask(mask_paths[idx])batch_images.append(image)batch_masks.append(mask)yieldnp.array(batch_images),np.array(batch_masks)
模型构建

1. 加载Deeplab模型

torch提供了预训练的Deeplab模型,可以直接加载并进行微调。

importtensorflowastffromtensorflow_examples.models.pix2piximportpix2pixdefbuild_deeplab_model(input_shape,num_classes):base_model=tf.keras.applications.MobileNetV2(input_shape=input_shape,include_top=False)layer_names=['block_1_expand_relu',# 64x64'block_3_expand_relu',# 32x32'block_6_expand_relu',# 16x16'block_13_expand_relu',# 8x8'block_16_project',# 4x4]layers=[base_model.get_layer(name).outputfornameinlayer_names]# 创建特征提取器模型down_stack=tf.keras.Model(inputs=base_model.input,outputs=layers)down_stack.trainable=Falseup_stack=[pix2pix.upsample(512,3),# 4x4 -> 8x8pix2pix.upsample(256,3),# 8x8 -> 16x16pix2pix.upsample(128,3),# 16x16 -> 32x32pix2pix.upsample(64,3),# 32x32 -> 64x64]inputs=tf.keras.layers.Input(shape=input_shape)x=inputs# 下采样skips=down_stack(x)x=skips[-1]skips=reversed(skips[:-1])# 上采样forup,skipinzip(up_stack,skips):x=up(x)concat=tf.keras.layers.Concatenate()x=concat([x,skip])# 最后一层last=tf.keras.layers.Conv2DTranspose(num_classes,3,strides=2,padding='same')# 64x64 -> 128x128x=last(x)returntf.keras.Model(inputs=inputs,outputs=x)
2. 编译模型

定义损失函数、优化器和评估指标。

defdice_loss(y_true,y_pred):smooth=1e-6y_true_f=tf.reshape(y_true,[-1])y_pred_f=tf.reshape(y_pred,[-1])intersection=tf.reduce_sum(y_true_f*y_pred_f)return1-(2.0*intersection+smooth)/(tf.reduce_sum(y_true_f)+tf.reduce_sum(y_pred_f)+smooth)defdice_coef(y_true,y_pred):smooth=1e-6y_true_f=tf.reshape(y_true,[-1])y_pred_f=tf.reshape(y_pred,[-1])intersection=tf.reduce_sum(y_true_f*y_pred_f)return(2.0*intersection+smooth)/(tf.reduce_sum(y_true_f)+tf.reduce_sum(y_pred_f)+smooth)model=build_deeplab_model(input_shape=(256,256,3),num_classes=1)model.compile(optimizer='adam',loss=dice_loss,metrics=[dice_coef])
模型训练
1. 准备数据

假设你已经有了图像路径列表image_paths和对应的掩码路径列表mask_paths

batch_size=8train_generator=generator(batch_size,image_paths,mask_paths)

2. 训练模型

设置训练参数并开始训练。

epochs=50steps_per_epoch=len(image_paths)//batch_size history=model.fit(train_generator,steps_per_epoch=steps_per_epoch,epochs=epochs,callbacks=[tf.keras.callbacks.ModelCheckpoint('tongue_segmentation.h5',save_best_only=True),tf.keras.callbacks.EarlyStopping(patience=5,restore_best_weights=True)])
模型推理
1. 加载模型

加载训练好的模型。

model=tf.keras.models.load_model('tongue_segmentation.h5',custom_objects={'dice_loss':dice_loss,'dice_coef':dice_coef})
2. 进行推理

对新的舌苔图像进行分割。

defpredict_and_visualize(image_path,model,target_size=(256,256)):image=preprocess_image(image_path,target_size)image=np.expand_dims(image,axis=0)# 添加批次维度prediction=model.predict(image)prediction=(prediction>0.5).astype(np.uint8)# 二值化prediction=np.squeeze(prediction,axis=-1)# 移除通道维度# 可视化结果original_image=cv2.imread(image_path)original_image=cv2.resize(original_image,target_size)overlay=np.zeros_like(original_image)overlay[prediction==1]=(0,255,0)# 绿色result=cv2.addWeighted(original_image,0.7,overlay,0.3,0)plt.figure(figsize=(10,5))plt.subplot(1,3,1)plt.title('Original Image')plt.imshow(cv2.cvtColor(original_image,cv2.COLOR_BGR2RGB))plt.axis('off')plt.subplot(1,3,2)plt.title('Prediction')plt.imshow(prediction,cmap='gray')plt.axis('off')plt.subplot(1,3,3)plt.title('Overlay')plt.imshow(cv2.cvtColor(result,cv2.COLOR_BGR2RGB))plt.axis('off')plt.show()# 测试predict_and_visualize('test_image.jpg',model)
总结

通过上述步骤,你可以使用Deeplab模型进行舌苔分割检测。从环境搭建、数据准备、模型构建、训练到推理,每一步都非常重要。通过合理的数据预处理和模型调优,可以显著提高分割的准确性。希望这篇教程能为你在医学图像分割领域的研究和实践提供有价值的参考。如果你有任何问题或需要进一步的帮助,请随时提问。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 8:00:48

easymall----管理后端分类展示

目的效果 建表思路:categoryId是必须的 标识产品本身 因为是树形结构需要与父id联动 所以需要 pcategoryId 产品本身需要名字 所以需要 category_name 所以最基础的字段只需要这三个 表格展示: sort字段为额外功能 可以通过前端拖动进行人为的排序 可加可不加 control…

作者头像 李华
网站建设 2026/4/18 8:01:38

ue metahuman自动绑定

目录 创建仅关节绑定: 1. 创建完整绑定 报错:无用户登录,请自动触发登录流程 打开 metahuman charter 创建仅关节绑定: 只创建骨骼结构和身体的绑定,不包含面部控制器、表情动画、头发、Groom 等 MetaHuman 特殊资…

作者头像 李华
网站建设 2026/4/18 4:11:40

可用于近红外光谱数据分析的网上公开数据集

可用于近红外光谱数据分析的网上公开数据集 记个小笔记:记录一下最近阅读的论文中出现的用于近红外光谱分析的网上公开数据集 1.药片数据:http://www.eigenvector.com/data/tablets/index.html 该数据集包括两台 NIR 光谱仪测定的 655 个药片的近红外透射谱&#xf…

作者头像 李华
网站建设 2026/4/18 7:36:45

2026年,不管是前端还是后端,最终都是“站长”

以前我们叫“全栈工程师”,听起来像个干苦力的。现在,请叫我“站长”(Webmaster)。历史的螺旋 还记得 2000 年吗? 那时候没有“前端”和“后端”的区别。你写 HTML,你写 PHP,你配 Apache&#x…

作者头像 李华
网站建设 2026/4/18 7:42:56

大数据毕设项目推荐-基于python+django的大数据短视频分析推荐系统的设计与实现基于django+大数据平台的短视频推荐系统设计与实现【附源码+文档,调试定制服务】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华