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函数的探索之旅相关推荐

  1. TF:tensorflow框架中常用函数介绍—tf.Variable()和tf.get_variable()用法及其区别

    TF:tensorflow框架中常用函数介绍-tf.Variable()和tf.get_variable()用法及其区别 目录 tensorflow框架 tensorflow.Variable()函数 ...

  2. TP框架中S函数使用方法

    TP框架中S函数使用步骤: //初始化 type为缓存方式;prefix为缓存前缀标示,也就是名字;expire为生存周期  //我这里设置缓存方式为xcache,名字ticket,周期7100秒 c ...

  3. python中query函数-Pandas探索之高性能函数eval和query解析

    Python Data Analysis Library 或 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的.Pandas 纳入了大量库和一些标准的数据模型,提供了高 ...

  4. flask框架中勾子函数的使用

    在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如: 在请求开始时,建立数据库连接: 在请求开始时,根据需求进行权限校验: 在请求结束时,指定数据的交互格式: 为了让每个视图函数避免编 ...

  5. ext 日期时间控件js html页面代码,Ext JS框架中日期函数的用法及日期选择控件的实现...

    增加或减少时间,这个函数不改变原有Date对象的值,而是返回一个新的Date对象. // @param {Date} date 原日期对象. // @param {String} interval v ...

  6. 各种图像处理库中imread函数的区别

    https://zodiac911.github.io/blog/imread_differences.html 常见的图片 io 方式 PIL.Image.open scipy.misc.imrea ...

  7. 【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 ...

  8. 浏览器向服务器发送的消息称为,网络是怎样连接之浏览器的探索之旅读书笔记(一)...

    照例是写在前面的话,今天在这里想和自己说一些话,希望未来的自己能够记住,就像我在简书的签名里写下的,"希望自己能记得当下写下那段文字的初心!",学习其实是一件非常严肃的事情,它容不 ...

  9. python开发图片工具_工具|ImagePy:一款基于Python的高扩展性开源图像处理框架

    加入极市专业CV交流群,与6000+来自腾讯,华为,百度,北大,清华,中科院等名企名校视觉开发者互动交流!更有机会与李开复老师等大牛群内互动! 同时提供每月大咖直播分享.真实项目需求对接.干货资讯汇总 ...

最新文章

  1. 新手初学Regular Expression正则表达式--快速入门
  2. python 双冒号
  3. [LeetCode] Combinations
  4. php把proto解析为文档,Protobuf 文件生成工具 Prototool 命令详解
  5. Win10系统,安装虚拟机,是微软自家的 Hyper-V ?还是轻量级的 Virtual Box ?
  6. axios拦截器的实现
  7. python实践心得体会_“Python自然语言实践”——总结(一),实战
  8. php 之 ajax,PHP之AJAX
  9. extjs给panel添加滚动条_extjs.treePanel在ie9下滚动条的显示问题-阿里云开发者社区...
  10. jQuery中的gt和lt
  11. paip.session的调试in php
  12. 【优化分类】基于matlab遗传算法结合爬山算法优化极限学习机分类【含Matlab源码 1660期】
  13. 解决Iframe嵌入帆软BI系统后,Chrome升级后跨域出现登录界面,Cookie写入不成功。解决办法
  14. Logback使用总结
  15. Sipp命令行参数说明
  16. 表贴电阻尺寸与什么有关_贴片电阻简介:功率大小与尺寸对应表
  17. win10计算机未连接到网络适配器,Windows 10 Hyper-V网络适配器未连接
  18. Creating a universal SNP and small indel variant caller with deep neural networks理解
  19. SWING HACKS电子书及范例代码
  20. 构造二叉树-前序遍历

热门文章

  1. 计算机会计期中考试,会计从业资格考试《会计电算化》基础阶段备考题
  2. 北斗终端与计算机传输信息,北斗短报文船载终端,北斗卫星海上通信终端问世,海上作业再也不怕失联...
  3. 4种常见的鉴权方式及说明
  4. 计算机的安全服务有哪些,网络安全服务包括哪些
  5. tds与oracle,oracle和sqlserver找不到字段的错误
  6. ec20 以太网_整车通讯系统——车载以太网系统系列文章(第一篇)
  7. 短网址dwz.cn批量注册
  8. 谈谈对数据治理的理解
  9. 机器学习教程 之 SKlearn 中 PCA 算法的运用:人脸识别实例
  10. 解决——U盘格式化为NTFs之后,显示不了U盘