我正在尝试将二维高斯拟合到图像中。噪声很低,所以我试图旋转图像,使两个主轴不同时变化,算出最大值,然后计算两个维度的标准偏差。选择的武器是Python。

然而,我一直在寻找图像的特征向量——numpy.linalg.py假设离散的数据点。我想把这幅图像作为概率分布,取样几千点,然后根据这个分布计算特征向量,但我确信一定有一种方法可以直接从这幅图像中找到特征向量(即高斯椭圆的半长轴和半长轴)。有什么想法吗?

非常感谢:)

只是一个简短的说明,有几个工具来适应高斯图像。我唯一能想到的就是Scikits.Learn,它不是完全面向图像的,但我知道还有其他的。

准确地计算协方差矩阵的特征向量是非常昂贵的。您必须将图像的每个像素(或大的ISH随机采样)与X、Y点相关联。

基本上,你会做如下的事情:

import numpy as np

# grid is your image data, here...

grid = np.random.random((10,10))

nrows, ncols = grid.shape

i,j = np.mgrid[:nrows, :ncols]

coords = np.vstack((i.reshape(-1), j.reshape(-1), grid.reshape(-1))).T

cov = np.cov(coords)

eigvals, eigvecs = np.linalg.eigh(cov)

相反,您可以利用它是一个定期采样的图像的事实,并计算它的时刻(或"国际轴")。对于大图像来说,这会快得多。

作为一个简单的例子,(我使用了我以前的一个答案的一部分,以防你发现它有用…)

import numpy as np

import matplotlib.pyplot as plt

def main():

data = generate_data()

xbar, ybar, cov = intertial_axis(data)

fig, ax = plt.subplots()

ax.imshow(data)

plot_bars(xbar, ybar, cov, ax)

plt.show()

def generate_data():

data = np.zeros((200, 200), dtype=np.float)

cov = np.array([[200, 100], [100, 200]])

ij = np.random.multivariate_normal((100,100), cov, int(1e5))

for i,j in ij:

data[int(i), int(j)] += 1

return data

def raw_moment(data, iord, jord):

nrows, ncols = data.shape

y, x = np.mgrid[:nrows, :ncols]

data = data * x**iord * y**jord

return data.sum()

def intertial_axis(data):

"""Calculate the x-mean, y-mean, and cov matrix of an image."""

data_sum = data.sum()

m10 = raw_moment(data, 1, 0)

m01 = raw_moment(data, 0, 1)

x_bar = m10 / data_sum

y_bar = m01 / data_sum

u11 = (raw_moment(data, 1, 1) - x_bar * m01) / data_sum

u20 = (raw_moment(data, 2, 0) - x_bar * m10) / data_sum

u02 = (raw_moment(data, 0, 2) - y_bar * m01) / data_sum

cov = np.array([[u20, u11], [u11, u02]])

return x_bar, y_bar, cov

def plot_bars(x_bar, y_bar, cov, ax):

"""Plot bars with a length of 2 stddev along the principal axes."""

def make_lines(eigvals, eigvecs, mean, i):

"""Make lines a length of 2 stddev."""

std = np.sqrt(eigvals[i])

vec = 2 * std * eigvecs[:,i] / np.hypot(*eigvecs[:,i])

x, y = np.vstack((mean-vec, mean, mean+vec)).T

return x, y

mean = np.array([x_bar, y_bar])

eigvals, eigvecs = np.linalg.eigh(cov)

ax.plot(*make_lines(eigvals, eigvecs, mean, 0), marker='o', color='white')

ax.plot(*make_lines(eigvals, eigvecs, mean, -1), marker='o', color='red')

ax.axis('image')

if __name__ == '__main__':

main()

强大地拟合高斯可能很困难。在IEEE信号处理杂志上有一篇关于这个主题的有趣文章:

Hongwei Guo,"A Simple Algorithm for Fitting a Gaussian Function" IEEE

Signal Processing Magazine, September 2011, pp. 134--137

我在这里给出1d案例的实现:

http://scipy-central.org/item/28/2/fitting-a-gaussian-to-noise-data-points网站

(向下滚动查看结果匹配)

你尝试过主成分分析(PCA)吗?也许MDP包可以用最少的努力完成这项工作。

python如何提取图片特征向量_在python中计算图像的特征向量相关推荐

  1. python怎么把图片压缩_使用Python轻松批量压缩图片

    在互联网,图片的大小对一个网站的响应速度有着明显的影响,因此在提供用户预览的时候,图片往往是使用压缩后的.如果一个网站图片较多,一张张压缩显然很浪费时间.那么接下来,我就跟大家分享一个批量压缩图片的方 ...

  2. python如何使用图片做背景_用Python批量给照片换底色,基于opencv模块

    现在网上出现了很多在线换底色的网页版工具是这么做的呢?其实用Python就可以实现. 环境要求 Python3 numpy函数库 opencv库 安装 下载适应版本的numpy函数库,我电脑是WIN1 ...

  3. python读取raw图片文件_在python下读取并展示raw格式的图片实例

    raw文件可能有些人没有,因此,先用一张图片创建一个raw格式的文件(其实可以是其他类型的格式文件) import numpy as np import cv2 img = cv2.imread('c ...

  4. python正则表达式提取字符串密码_用python正则表达式提取字符串

    在日常工作中经常遇见在文本中提取特定位置字符串的需求.python的正则性能好,很适合做这类字符串的提取,这里讲一下提取的技巧,正则表达式的基础知识就不说了,有兴趣的可以看re的教程. 提取一般分两种 ...

  5. python数据提取和合并_用Python提取和合并Excel数据

    我有一个Excel(.xlsx)文件,大约有40个工作表.每个工作表具有相同的结构,但包含不同的数据.我想从每张表格中提取信息,并将其合并到一张表格中,每张表格中的信息一张叠一张地叠在一起.我需要从每 ...

  6. python自动化提取pdf表格_[Python] 自动化办公 多种提取PDF图片的方法

    转载请注明:陈熹 chenx6542@foxmail.com (简书号:半为花间酒) 若公众号内转载请联系公众号:早起Python 这篇文章能学到的主要内容: 基于 fitz 库和正则搜索提取图片 基 ...

  7. python解除windows锁屏_实战 | Python批量提取Win10锁屏壁纸

    使用Win10的朋友会发现,每次开机锁屏界面都会有不一样的漂亮图片,这些图片通常选自优秀的摄影作品,十分精美. 但是由于系统会自动更换这些图片,所以就算再好看的图片,也许下次开机之后就被替换掉了. 借 ...

  8. 使用Python批量提取并保存docx文档中的图片

    问题描述: 提取docx文档中的所有图片,保存为独立的图片文件. 技术要点: 需要安装扩展库python-docx 示例文件: 参考代码: 码运行结果: 神操作: 如果实在看不懂上面的代码,但是又有同 ...

  9. python如何实现图片工具_常用的十大 python 图像处理工具

    本文为 AI 研习社编译的技术博客,原标题 : 10 Python image manipulation tools. 作者 | Parul Pandey 翻译 | 安其罗•乔尔.JimmyHua 编 ...

最新文章

  1. C++知识点24——使用C++标准库(顺序容器deque的初始化,赋值,访问,添加,删除,交换与迭代器失效)
  2. Batch Normalization 与Dropout 的冲突
  3. 今天突然想到一个问题:地球在转动吗,由东西向西跳与由西向东跳哪个更远...
  4. LeetCode Algorithm 386. 字典序排数
  5. linux服务器备份软件下载,Linux服务器的常用备份方法 服务器系统备份方法
  6. [html] 打印页面时怎样自定义打印页眉页脚或者去掉眉页脚?
  7. C++ 0x 使用可变参数模板类 实现 C# 的委托机制
  8. 2021国潮新消费产业洞察报告
  9. 北大教授郑也夫斗胆谈了7个天大的问题,每个都非常狠,也很现实
  10. Markdown简介
  11. 视觉SLAM笔记(39) 求解 ICP
  12. Wireshark验证TCP三次握手四次挥手
  13. 客运售票员_「我做一天春运人」体验通村客车售票员兼安全员 温馨慢车上我背着太阳奔跑...
  14. 计算机系英文简历技能skill,如何填英文简历中SKILL选项
  15. python大作业数独_python做一个数独小游戏
  16. python分段函数输入x的值求y的值,根据以下分段函数计算y的值,要求x的值由键盘输入,...
  17. paypal如何支付欧元_Paypal怎么付欧元
  18. Unity集成Bugly踩坑
  19. Presenting view controllers on detached view controllers 警告根由
  20. CSU 1457 Boggle (字典树+DFS)

热门文章

  1. CrawlSpider 详解
  2. 碧雪情天服务器地址源如何修改,稀有游戏《碧雪情天online》网络版王者归来一键服务端+客户端 支持转生系统和新图...
  3. 为什么python打不开_python文件打不开如何解决
  4. 威纶触摸屏使用说明书_MODBUS通信之触摸屏与变频器通信知识分享(一)
  5. linux底行模式显示信息,14天linux命令加强
  6. 大数据技术架构_架构大数据图
  7. opencv 图像 抠图 算法_图像抠图算法学习 - Shared Sampling for Real-Time Alpha Matting
  8. 作为Java程序员,这些开源工具你应该要学习!
  9. Java程序员的自我修养?
  10. Java程序员常犯的几类错误