Imagepy图像处理框架中neighbors函数的探索之旅
Imagepy图像处理框架中neighbors函数的探索之旅
https://github.com/Image-Py
一、探索函数
1.1 neighbors函数
1.2 结果早知
def neighbors(shape):
以下讲解以二维为例,假设dhspe=3,5
dim = len(shape)
获取维度,2
block = np.ones([3]*dim)
制作3x3的1数组
block[tuple([1]*dim)] = 0
[1,1]置0,也就是方块中心
idx = np.where(block>0)
获取非0像素索引,也就是除了中心
idx = np.array(idx, dtype=np.uint8).T
矩阵化
idx = np.array(idx-[1]*dim)
减1,中心化,也就空缺的[1,1]变[0,0]
idx此时是[[-1,-1],[-1,0],[-1,1],[0,-1],[0,1],[1,-1],[1,0],[1,1]]
acc = np.cumprod((1,)+shape[::-1][:-1])
(3,5)变(1,5),累乘,变(1,5)
return np.dot(idx, acc[::-1])
与(5,1)点积,变[-6,-5,-4,-1,1,4,5,6]
得到所有邻居像素的一维索引差。这样用原数组的reval形式,可以实现邻居遍历,兼容任意维度。
二、探索历程
2.1函数定义
https://blog.csdn.net/henhen2002/article/details/6289505
matlab图像的邻域操作与块操作
2.2 shape
https://www.zhihu.com/question/64894713/answer/228169291
例如,一维数组a = [1,2,3,4,5,8],取得一个元素用a[i],只有一层
下面是一个二维数组,ndim为2,shape属性值为(3,3)
下面是一个三维数组,ndim为3,shape属性值为(2,2,3)
c =
[
[
[1,2,3],
[4,5,6]
],
[
[7,8,9],
[10,11,12]
]
]
取得一个确切的元素,
用b[i][j][k]的格式,数组嵌套了3层,第一层有2个元素,第二层也是2个元素,第三层有三个元素
作者:张伊
链接:https://www.zhihu.com/question/64894713/answer/228169291
2.3 [1]*dim与ones()
['Hi!'] * 4 |
['Hi!', 'Hi!', 'Hi!', 'Hi!'] |
重复 |
>>>tuple([1,2,3,4])
(1, 2, 3, 4)
>>> np.ones(5)array([ 1., 1., 1., 1., 1.])
>>>
>>> np.ones((5,), dtype=int)array([1, 1, 1, 1, 1])
>>>
>>> np.ones((2, 1))array([[ 1.], [ 1.]])
>>>
>>> s = (2,2)>>> np.ones(s)array([[ 1., 1.], [ 1., 1.]])
2.4 np.where()
其中condition、y和z都是数组,它的返回值是一个形状与condition相同的数组。当condition中的某个元素为True时,x中对应下标的值从数组y获取,否则从数组z获取:
作者:品颜完月
链接:https://www.zhihu.com/question/62844162/answer/300561552
2.5、np.cumprod(a)
Return the cumulative product of elements along a given axis.numpy.cumprod(a, axis=None, dtype=None, out=None)[source]
Examples
>>>
>>> a = np.array([1,2,3])>>> np.cumprod(a) # intermediate results 1, 1*2... # total product 1*2*3 = 6array([1, 2, 6])>>> a = np.array([[1, 2, 3], [4, 5, 6]])>>> np.cumprod(a, dtype=float) # specify type of outputarray([ 1., 2., 6., 24., 120., 720.])
The cumulative product for each column (i.e., over the rows) of a:
>>>
>>> np.cumprod(a, axis=0)array([[ 1, 2, 3], [ 4, 10, 18]])
The cumulative product for each row (i.e. over the columns) of a:
>>>
>>> np.cumprod(a,axis=1)array([[ 1, 2, 6], [ 4, 20, 120]])
2.6 a[::-1]
when you do a[::-1] , it starts from the end, towards the first, taking each element. So it reverses a. This is applicable for lists/tuples as well.
Example -
>>> a = '1232'>>> a[::-1]'2321'
2.7 a[:-1]
In [12]: l = list(range(10))
In [13]: l
Out[13]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [16]: l[:-1]
Out[16]: [0, 1, 2, 3, 4, 5, 6, 7, 8]
作者:张凯申
链接:https://www.zhihu.com/question/22686450/answer/114600058
2.8 np.dot()
机器学习有很多种矩阵乘法,比如点乘叉乘,Hadamard积,克罗内克积,在Python中要怎么用?
from numpy import dot,cross,kron # cross ref:https://docs.scipy.org/doc/numpy/reference/generated/numpy.cross.html#numpy.cross # dot,kron ref:https://docs.scipy.org/doc/numpy/reference/routines.linalg.html from scipy.linalg import hadamard # hadamard ref:https://docs.scipy.org/doc/scipy/reference/generated/scipy.linalg.hadamard.html#scipy.linalg.hadamard
作者:武锐
链接:https://www.zhihu.com/question/267008582/answer/316890249
三、不懂之处
3.1 block[tuple([1]*dim)] = 0
这个是对角线设置为0?
3.2 idx = np.array(idx - [1]*dim)
这个是几维数组?
四、Imagepy作者闫大说与群友说
4.1 函数目的
这个函数是获得邻居像素的索引差。
在查找极值和分水岭中有用到,目的是将任意维度转一维处理。
4.2 详细讲解
def neighbors(shape):
以下讲解以二维为例,假设dhspe=3,5
dim = len(shape)
获取维度,2
block = np.ones([3]*dim)
制作3x3的1数组
block[tuple([1]*dim)] = 0
[1,1]置0,也就是方块中心
idx = np.where(block>0)
获取非0像素索引,也就是除了中心
idx = np.array(idx, dtype=np.uint8).T
矩阵化
idx = np.array(idx-[1]*dim)
减1,中心化,也就空缺的[1,1]变[0,0]
idx此时是[[-1,-1],[-1,0],[-1,1],[0,-1],[0,1],[1,-1],[1,0],[1,1]]
acc = np.cumprod((1,)+shape[::-1][:-1])
(3,5)变(1,5),累乘,变(1,5)
return np.dot(idx, acc[::-1])
与(5,1)点积,变[-6,-5,-4,-1,1,4,5,6]
得到所有邻居像素的一维索引差。这样用原数组的ravel形式,可以实现邻居遍历,兼容任意维度。
shape就是个标记,内存都是ravel。
ravel是最接近物理存储模式的形态
如果用shape的方法遍历其实是非线性的,指针要跳来跳去的。
这个写法主要优势是对高维的兼容。
性能没差别,是针对c语言。
分水岭,局部极值,骨架拓扑重建都会用到那个函数。
就是有关高维度邻居遍历的
三维就是做一个高维度3x3立方体,中间置0,然后利用np.where拿到高维度的邻居索引,与目标shape的累乘卷积。
比如w*h的图,相邻列索引差1
而相邻行就差w
如果是w*h*z,你算一下三个维度各差多少
最末端肯定是差1
而上一个维度就差一行
再上一个,就差一个面
你看是不是累乘嘛
同理可以推广到更高维度
然后和小方块的多维坐标点乘
就是±1那些
三维意义是上下左右,点积刚才那个累乘结果,不就是邻居坐标差吗
第一个维度,第二个维度。。。分别前移或后移。。。
甚至没必要弄得很懂,反正np.where一个不漏
中间是自己,所以设0
但是起算点是0,0,所以减1
numpy.ravel
https://docs.scipy.org/doc/numpy/reference/generated/numpy.ravel.html
Imagepy图像处理框架中neighbors函数的探索之旅相关推荐
- TF:tensorflow框架中常用函数介绍—tf.Variable()和tf.get_variable()用法及其区别
TF:tensorflow框架中常用函数介绍-tf.Variable()和tf.get_variable()用法及其区别 目录 tensorflow框架 tensorflow.Variable()函数 ...
- TP框架中S函数使用方法
TP框架中S函数使用步骤: //初始化 type为缓存方式;prefix为缓存前缀标示,也就是名字;expire为生存周期 //我这里设置缓存方式为xcache,名字ticket,周期7100秒 c ...
- python中query函数-Pandas探索之高性能函数eval和query解析
Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的.Pandas 纳入了大量库和一些标准的数据模型,提供了高 ...
- flask框架中勾子函数的使用
在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如: 在请求开始时,建立数据库连接: 在请求开始时,根据需求进行权限校验: 在请求结束时,指定数据的交互格式: 为了让每个视图函数避免编 ...
- ext 日期时间控件js html页面代码,Ext JS框架中日期函数的用法及日期选择控件的实现...
增加或减少时间,这个函数不改变原有Date对象的值,而是返回一个新的Date对象. // @param {Date} date 原日期对象. // @param {String} interval v ...
- 各种图像处理库中imread函数的区别
https://zodiac911.github.io/blog/imread_differences.html 常见的图片 io 方式 PIL.Image.open scipy.misc.imrea ...
- 【python】tensorflow框架中的tf.gather_nd()函数对应的 pytorch框架的gather_nd()函数
tf.gather_nd 函数对应的pytorch函数 1. 简单介绍 2. 步入正题 2.1 tensorflow tf.gather_nd() 2.2 pytorch框架手动实现gather_nd ...
- 浏览器向服务器发送的消息称为,网络是怎样连接之浏览器的探索之旅读书笔记(一)...
照例是写在前面的话,今天在这里想和自己说一些话,希望未来的自己能够记住,就像我在简书的签名里写下的,"希望自己能记得当下写下那段文字的初心!",学习其实是一件非常严肃的事情,它容不 ...
- python开发图片工具_工具|ImagePy:一款基于Python的高扩展性开源图像处理框架
加入极市专业CV交流群,与6000+来自腾讯,华为,百度,北大,清华,中科院等名企名校视觉开发者互动交流!更有机会与李开复老师等大牛群内互动! 同时提供每月大咖直播分享.真实项目需求对接.干货资讯汇总 ...
最新文章
- 新手初学Regular Expression正则表达式--快速入门
- python 双冒号
- [LeetCode] Combinations
- php把proto解析为文档,Protobuf 文件生成工具 Prototool 命令详解
- Win10系统,安装虚拟机,是微软自家的 Hyper-V ?还是轻量级的 Virtual Box ?
- axios拦截器的实现
- python实践心得体会_“Python自然语言实践”——总结(一),实战
- php 之 ajax,PHP之AJAX
- extjs给panel添加滚动条_extjs.treePanel在ie9下滚动条的显示问题-阿里云开发者社区...
- jQuery中的gt和lt
- paip.session的调试in php
- 【优化分类】基于matlab遗传算法结合爬山算法优化极限学习机分类【含Matlab源码 1660期】
- 解决Iframe嵌入帆软BI系统后,Chrome升级后跨域出现登录界面,Cookie写入不成功。解决办法
- Logback使用总结
- Sipp命令行参数说明
- 表贴电阻尺寸与什么有关_贴片电阻简介:功率大小与尺寸对应表
- win10计算机未连接到网络适配器,Windows 10 Hyper-V网络适配器未连接
- Creating a universal SNP and small indel variant caller with deep neural networks理解
- SWING HACKS电子书及范例代码
- 构造二叉树-前序遍历
热门文章
- 计算机会计期中考试,会计从业资格考试《会计电算化》基础阶段备考题
- 北斗终端与计算机传输信息,北斗短报文船载终端,北斗卫星海上通信终端问世,海上作业再也不怕失联...
- 4种常见的鉴权方式及说明
- 计算机的安全服务有哪些,网络安全服务包括哪些
- tds与oracle,oracle和sqlserver找不到字段的错误
- ec20 以太网_整车通讯系统——车载以太网系统系列文章(第一篇)
- 短网址dwz.cn批量注册
- 谈谈对数据治理的理解
- 机器学习教程 之 SKlearn 中 PCA 算法的运用:人脸识别实例
- 解决——U盘格式化为NTFs之后,显示不了U盘