ji那天用到了python图片处理中的二值图像的骨架提取,在matlab中通过输入图像的二值,来处理得到图像的骨架,

skelimage = bwmorph(im, 'skel', inf);
在matlab中bwmorph的函数功能: 对二值图像进行数学形态学(Mathematical Morphology)运算。
语法格式:
BW2 = bwmorph(BW,operation)
对二值图像进行指定的形态学处理。
BW2 = bwmorph(BW,operation,n)
对二值图像进行n次指定的形态学处理。 n可以是Inf(无穷大), 这意味着将一直对该图像做同样的形态学处理直到图像不再发生变化。
其中operation有多种,可以是:
'bothat':进行“bottom hat”形态学运算,即返回源图像减去闭运算的图像;
'branchpoints':找到骨架中的分支点;
'bridge':进行像素连接操作;
'clean':去除图像中孤立的亮点,比如, 一个像素点, 像素值为1, 其周围像素的像素值全为0, 则这个孤立的亮点将被去除;
'close':进行形态学闭运算(即先膨胀后腐蚀);
'diag': 采用对角线填充, 去除八邻域的背景;
'dilate': 使用结构元素ones(3)对图像进行膨胀运算;
'endpoints':找到骨架中的结束点;
'erode':使用结构元素ones(3)对图像进行腐蚀运算;
'fill':填充孤立的黑点, 比如3*3的矩阵, 除了中间元素为0外, 其余元素全部为1, 则这个0将被填充为1;
'hbreak':断开图像中的H型连接;
'majority':如果一个像素的8邻域中有等于或超过5个像素点的像素值为1, 则将该点像素值置1;
'open':进行形态学开运算(即先腐蚀后膨胀);
'remove':如果一个像素点的4邻域都为1, 则该像素点将被置0;该选项将导致边界像素上的1被保留下来;
'skel':在这里n = Inf,骨架提取但保持图像中物体不发生断裂;不改变图像欧拉数;
'spur':去除小的分支, 或引用电学术语“毛刺”;
'thicken':在这里n = Inf, 通过在边界上添加像素达到加粗物体轮廓的目的;
'thin':在这里n = Inf,进行细化操作;
'tophat':进行“top hat”形态学运算, 返回源图像减去开运算的图像;
然后在python中,skdimage模块提供了两种方法可以获得图像的骨架,分别是Skeletonize()函数和medial_axis()函数。
二值图的骨架提取,在博客中有详细的介绍,关于图片的连通性博客中有详细的介绍。
用Skeletonize
#-*-coding:utf-8-*-
import os
from skimage import morphology,draw
import numpy as np
import matplotlib.pyplot as plt
from skimage import io,data,color
from skimage import measure path = 'timg.jpg'
img = io.imread(path)
print(img.shape)
row,col = img.shape[:2]
mmap = np.zeros([row,col])
#因为图像是三维的所以在这块取第一维
for i in range(row):
for j in range(col):
mmap[i,j] = img[i,j,0]
mmap = (mmap < 0.5) * 1 #图像二值化
img2 = morphology.skeletonize(mmap) #图像的二值化骨架提取
fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, figsize=(8, 4))
ax1.imshow(img, cmap=plt.cm.gray)
ax1.axis('off')
ax1.set_title('img', fontsize=20)
ax2.imshow(img2, cmap=plt.cm.gray)
ax2.axis('off')
ax2.set_title('img2', fontsize=20)
fig.tight_layout()
plt.show()

图片结果:

在matlab中有求骨架顶点的

outEndPoints = BOHitOrMiss(skelimage, 'end')

在python中没有找到相应的求骨架顶点的函数。
BOHitOrMiss这个函数是编写的,并不是库函数。
BOHitOrMiss.m
function out = BOHitOrMiss ( im, method )
%% BOHitOrMiss - end and triple points detection
%
% REFERENCE:
% Cecilia Di Ruberto,
% Recognition of shapes by attributed skeletal graphs,
% Pattern Recognition , -,
%
% HELP:
% Matlab's interpretation of the algorithm
% -> ; -> -; * -> ;
%
% INPUT:
% im - binary image.
% method - 'end' or 'triple'.
%
% OUTPUT:
% out - image with detected points
%
% USAGE:
% % Skeleton
% sk = bwmorph(im, 'thin', inf);
% % Hit or Miss
% out1 = BOHitOrMiss(sk, 'end');
% out2 = BOHitOrMiss(sk, 'triple');
%
% AUTHOR:
% Boguslaw Obara, http://boguslawobara.net/
%
% VERSION:
% 0.1 - // First implementation %% SE - endpoints
if strcmp(method, 'end')
se(:,:,) = [ - - ;...
- - ;...
- - - ]; se(:,:,) = [ - - ;...
- - ;...
- - - ]; se(:,:,) = [ - - - ;...
- ;...
- - - ]; se(:,:,) = [ - - - ;...
- - ;...
- - ]; se(:,:,) = [ - - - ;...
- - ;...
- - ]; se(:,:,) = [ - - - ;...
- - ;...
- - ]; se(:,:,) = [ - - - ;...
- ;...
- - - ]; se(:,:,) = [ - - ;...
- - ;...
- - - ];
%% SE - triple points (junctions)
elseif strcmp(method, 'triple')
se(:,:,) = [ - - ;...
;...
- - - ]; se(:,:,) = [ - ;...
- - ;...
- - ]; se(:,:,) = [ - - ;...
- ;...
- - ]; se(:,:,) = [ - - ;...
- - ;...
- ]; se(:,:,) = [ - - - ;...
;...
- - ]; se(:,:,) = [ - - ;...
- - ;...
- ]; se(:,:,) = [ - - ;...
- ;...
- - ]; se(:,:,) = [ - ;...
- - ;...
- - ]; se(:,:,) = [ - - ;...
- ;...
- - ]; se(:,:,)= [ - - ;...
- ;...
- - ]; se(:,:,)= [ - - ;...
- ;...
- - ]; se(:,:,)= [ - - ;...
- - ;...
- ]; se(:,:,)= [ - - ;...
- ;...
- - ]; se(:,:,)= [ - - ;...
- ;...
- - ]; se(:,:,)= [ - - ;...
- ;...
- - ]; se(:,:,)= [ - ;...
- - ;...
- - ];
end
%% Hit or Miss
out = zeros(size(im));
if strcmp(method, 'end') || strcmp(method, 'triple')
for i=:size(se,)
hom = bwhitmiss(im, se(:,:,i));
out = max(out, hom);
end
end
%%
end

python图片处理(三)的更多相关文章

  1. Python 图片转字符画

    Python 图片转字符画 一.课程介绍 1. 课程来源 原创 2. 内容简介 本课程讲述怎样使用 Python 将图片转为字符画 3. 前置课程 Python编程语言 Linux 基础入门(新版) ...

  2. media静态文件统一管理 操作内存的流 - StringIO | BytesIO PIL:python图片操作库 前端解析二进制流图片(了解) Admin自动化数据管理界面

    一.media ''' 1. 将用户上传的所有静态文件统一管理 -- settings.py -- MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 2. 服务 ...

  3. 转 Python爬虫入门三之Urllib库的基本使用

    静觅 » Python爬虫入门三之Urllib库的基本使用 1.分分钟扒一个网页下来 怎样扒网页呢?其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由浏览器 ...

  4. 将python图片转为二进制文本的实例

    https://www.jb51.net/article/155342.htm 写在最前面: 我在研究机器学习的过程中,给的数据集是手写数字图片被处理后的由0,1表达的txt文件,今天写一写关于图片转 ...

  5. python skimage图像处理(三)

    python skimage图像处理(三) This blog is from: https://www.jianshu.com/p/7693222523c0  霍夫线变换 在图片处理中,霍夫变换主要 ...

  6. 进击的Python【第三章】:Python基础(三)

    Python基础(三) 本章内容 集合的概念与操作 文件的操作 函数的特点与用法 参数与局部变量 return返回值的概念 递归的基本含义 函数式编程介绍 高阶函数的概念 一.集合的概念与操作 集合( ...

  7. Python 基础语法(三)

    Python 基础语法(三) --------------------------------------------接 Python 基础语法(二)------------------------- ...

  8. 笨办法学 Python (第三版)(转载)

    笨办法学 Python (第三版) 原文地址:http://blog.sina.com.cn/s/blog_72b8298001019xg8.html   摘自https://learn-python ...

  9. 教程,Python图片转字符堆叠图

    Python 图片转字符画 一.实验说明 1. 环境登录 无需密码自动登录, 2. 环境介绍 本实验环境采用带桌面的UbuntuLinux环境,实验中会用到桌面上的程序: LX终端(LXTermina ...

随机推荐

  1. 解题:SCOI 2008 配对

    题面 如果没有两个数不能相同这个限制就两个数组排序后贪心即可.现在加上这个限制,注意到每个数组中的数是两两不同的,所以每次一定能在前面或后面一个数中找一个换过来,这样每次考虑相邻三个数转移就可以了,注 ...

  2. 利用signapk.jar工具对apk文件进行签名

    signapk.jar是Android源码包中的一个签名工具. 代码位于:Android源码目录下,signapk.jar 可以编译build/tools/signapk/ 得到. 使用signapk ...

  3. 团体程序设计天梯赛 L3-016. 二叉搜索树的结构

    #include <cstdio> #include <cstdlib> #include <string.h> #include <math.h> # ...

  4. web项目中日志管理工具的使用

    在web项目中,很多时候会用到日志管理工具,常见的日志管理用具有:JDK logging(配置文件:logging.properties) 和log4j(配置文件:log4j.properties) ...

  5. Chapter 4(栈与队列)

    1.栈的顺序存储结构 //*********************************stack_array.h************************************ #ifn ...

  6. ural 2032 Conspiracy Theory and Rebranding (数学水题)

    ural 2032  Conspiracy Theory and Rebranding 链接:http://acm.timus.ru/problem.aspx?space=1&num=2032 ...

  7. 【重要】Nginx模块Lua-Nginx-Module学习笔记(三)Nginx + Lua + Redis 已安装成功(非openresty 方式安装)

    源码地址:https://github.com/Tinywan/Lua-Nginx-Redis 一. 目标 使用Redis做分布式缓存:使用lua API来访问redis缓存:使用nginx向客户端提 ...

  8. 使用abcpdf将html转换成pdf文件

    ABCpdf.NET使用介绍 最新做一个项目需要生成pdf文档以供打印,研究决定使用abcpdf这款组件,先针对其使用方法做一个简单的总结介绍以给有需要的朋友做参考. 一. ABCpdf.NET简单介 ...

  9. java基础学习:JavaWeb之Cookie和Session

    一.会话概述 1.1.什么是会话? 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话其中不管浏览器发送多少请求,都视为一次会话,直到 ...

  10. 让PHPCms内容页支持JavaScript_

    在PHPCms内容页中,出于完全考虑,默认是禁止JavaScript脚本的,所以我们在添加文章时,虽然加入了js代码,但实际上并没有起作用,而是以文本形式显示.如果要让内容页支持JavaScript, ...