文章目录

  • 1.提取上边界
  • 2.提取中线
  • 11.18 更新(转为连续的矢量线)

碎碎念:
比较简单粗暴的方法…缺点就是提取上边界的时候有一些细碎的像元还是没办法删去,如果图案过分扭曲,效果就差很多。(初学python…代码比较冗长繁琐[扶额])
适用于值为0和1的栅格图像。

1.提取上边界

原图像:

提取后:

代码:

def Get_UpperBoundary(dataarray,rows,cols):boundary=dataarray.copy()boundary[boundary > 0] = 0for i in range(cols-1):for j in range(rows-1):if (dataarray[j, i] != 0) and (((dataarray[j-1, i] == 0) and (dataarray[j,i-1]==0)) or ((dataarray[j-1,i]==0) and (dataarray[j,i+1]==0)) or ((dataarray[j-1,i]==0) and (dataarray[j-1,i-1]==0))or ((dataarray[j-1,i]==0) and (dataarray[j-1,i+1]==0))):boundary[j, i] = 1for i in range(cols-1):for j in range(rows-1):if (dataarray[j, i] != 0):boundary[j, i] = 1break#删去底部多余的像元点for i in range(cols-1):a = 0; b = []; c = []c = np.array(c)# 提取出非0点的位置for j in range(rows-1):if(boundary[j, i] != 0):b.append(j)a = a+1if(a>1):for k in range(len(b) - 1):a = b[k + 1] - b[k]  # 后者减前者c = np.append(c, a)  # 添加元素到新列表#差值大于5像元之后的其他像元会被剔除c[c > 5] = 999;t=0for n in range(len(c)):if(c[n] == 999):t += 1;a = int(n+1)breakif(t!=0):aa = int(len(b)-1)if(a == aa):boundary[b[a], i] = 0for m in range(a, aa):boundary[b[m], i] = 0return boundary

2.提取中线

原图像同上
提取后:

代码:

def Get_MedianBoundary(dataarray,rows,cols):boundary=dataarray.copy()boundary[boundary > 0] = 0for i in range(cols-1):b = 0d = 0for j in range(rows-1):if (dataarray[j,i]!=0) :b += jd = d + 1if(d!=0):boundary[b//d, i] = 1return boundary

11.18 更新(转为连续的矢量线)

就关于线不连续的问题,可以使用arcpy进行解决,但是前提是得安装了arcgis,最终的结果会是一条连续的矢量线。使用arcpy是为了方便批量处理,如果只有一两张待处理数据,直接用arcgis做完全可以。

主要思路如下:
1.首先将栅格转点
2.选出点值为1的点要素(结果如下图所示,图中使用的为上面提取的中线数据)

3.添加字段,计算这些点的经度值(做这一步是因为arcgis在将点连成线的时候,默认是一行一行的连的,结果就会变成下图这样)
这是错误示例:

4.添加字段后,根据计算出的经度的顺序,连接点成矢量线

接下来贴上arcpy代码:

# -*- coding: utf-8 -*-
import os
import arcpyarcpy.env.workspace =""#这里是待处理数据的文件夹位置
path = ""#待处理数据位置
PointPath = ""#栅格转点的暂存位置,后面会删除
SelectPointPath = ""#筛选点的暂存位置,后面会删除
OutpolylinePath = ""#最终结果的位置
arcpy.RasterToPoint_conversion (path, PointPath)#栅格转点
arcpy.Select_analysis(PointPath, SelectPointPath,'"GRID_CODE" = 1')#筛选点
arcpy.AddField_management(SelectPointPath, "COLS", "DOUBLE", "", "", "#", "#", "#", "#")#添加字段
arcpy.CalculateField_management(SelectPointPath, "COLS", "!shape.centroid.x!", "PYTHON_9.3")#计算各点经度
arcpy.PointsToLine_management (SelectPointPath, OutpolylinePath, "GRID_CODE", "COLS", "")#点连成线
os.remove(PointPath)
os.remove(SelectPointPath)#删除暂存的点文件

python提取二值栅格上边界和中线相关推荐

  1. cvtcolor python opencv_二值分析 | OpenCV + skimage如何提取中心线

    点击上方蓝字关注我们 微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 问题 前几天有个人问了我一个问题,问题是这样的,他有如下的一张二值图像: 怎么得到白色Blob中心线,他希望的 ...

  2. Python BFS 提取二值图联通域

    <Python BFS 提取二值图联通域>    2016年实习那会儿在京东搞身份证 OCR,那时候的OCR是基于 CNN 的单字识别的pipeline,所以就需要一些方法来对字符进行切割 ...

  3. python opencv二值化图像_python opencv,读取彩色图像,提取三通道,图像二值化,提取图像的边缘...

    python opencv,读取彩色图像,提取三通道,图像二值化,提取图像的边缘 python opencv 1,读取图像 2,图像变矩阵 3,图像转灰度图像 4,彩色图像是3D数组 5,灰度图像是2 ...

  4. python 图像二值化

    自适应二值化,高斯加权二值化: image =cv2.imread(r'E:\data\barcode\test\1009_11\test\blur\509915979678918664.jpg', ...

  5. OpenCV-细化算法(thinning algorithm)算法详解——提取二值图的骨架

    昨天不是说同学问我怎么绘制出轮廓的中心线.然后我上网查了一下其实这个有专门的算法叫做细化算法.用专业术语去描述绘制出轮廓的中心线叫做(提取图像的骨架).然后这一篇博客呢是我对这个细化算法的解读与实操~ ...

  6. python + opencv + 二值化处理图片数据集(三种方法)

    二值化处理图片数据集 首先导入相应的包 cv2即opencv-python包 if __name__ == "__main__": 上面这一句话的含义: 自己的 .py 可以作为自 ...

  7. python图片二值化处理百度图api_Python+百度AI实现图像处理-附源码

    开始的话:百度AI新增加了图像处理的api,相信不少朋友用PS处理图片,而今天我们用Python+百度ai来解决. ------------------------------------------ ...

  8. ostu阈值分割python实现_opencv python 图像二值化/简单阈值化/大津阈值法

    1简单的阈值化 cv2.threshold第一个参数是源图像,它应该是灰度图像. 第二个参数是用于对像素值进行分类的阈值, 第三个参数是maxVal,它表示如果像素值大于(有时小于)阈值则要给出的值. ...

  9. python opencv图像二值化函数_python opencv 二值化 计算白色像素点的实例

    python opencv 二值化 计算白色像素点的实例 贴部分代码 #! /usr/bin/env python # -*- coding: utf-8 -*- import cv2 import ...

  10. python学习——二维码生成和识别

    二维码知识 在介绍二维码原理之前,先说下条形码 .条形码我们都见过,就是超市收银员结账的时候扫的那个东西.它是一种"一维码",竖直方向,条码是均匀的,信息只能在水平方向上存储,并且 ...

最新文章

  1. 微信小程序开发的入门基础知识点
  2. openstack 之 控制节点物理机备份
  3. 销售额分布直方图和茎叶图
  4. 数据绑定--Repeater, DataList, or GridView?
  5. ad中装配图如何导出_如何把endnote中的research note和title等一起导出成表格或者txt?...
  6. Freeswitch在内网,由服务器防火墙映射出来,IMSDROID作为被叫的问题
  7. const数据成员的初始化
  8. 7、STC12C5A60S2核心芯片说明文档
  9. 2021蓝桥杯Java复习【史上最详细攻略】【持续更新】
  10. 如何把极坐标化为直角坐标_极坐标方程化为直角坐标方程
  11. 通用产品需求文档模板
  12. Day 7 输出m到n之间的素数
  13. 利用Java提取excel内容
  14. 如何综合掌握 DB2 和 Informix
  15. VBA清除除第一行之外所有表格的数据
  16. MyEclipse Building Workspace问题
  17. 收银系统的优势功能有哪些?
  18. 2022-07-10 第四小组 孙翰章 CSS学习笔记
  19. 当PLSQL一直打不开怎么办
  20. 猿创征文|JAVA 实现《连连看》游戏

热门文章

  1. 在Windows 10中打开PowerShell的9种方法
  2. android studio scala插件,在Android Studio中使用Scala和Java
  3. lol服务器维护2021,lol维护公告最新时间2021什么时候结束 11.11版本5月27日更新内容介绍...
  4. Guava学习之Splitter
  5. 【转载】《三体》:给时光以生命,给岁月以文明
  6. 什么是 docker?docker和虚拟机有什么差别和不同?
  7. python中delete函数_python中的delete函数是如何使用的,最好带例子,谢谢
  8. 统计推断-经典统计推断
  9. 吉林大学软件学院黄庆道《最优化算法》对偶单纯形使用大M法条件
  10. 盛语小智教育机器人是骗人的_教育机器人哪个好 盛语小智教育机器人带你发家致富...