如何检验dmperm的结果

转载 2012年03月21日 21:55:52
最初发布于:2011年7月12日,http://blog.sina.com.cn/xialulee
    实际上在整个《读Matlab7.7 IPT的bwlabel函数》系列中,我们还没有给出用Python和csparse实现的bwlabel的完整代码。虽然在《读Matlab7.7 IPT的bwlabel函数(四)——bwlabel大结局:dmperm现身》中用csparse的dmperm消除错误标签,最终得到了标记图像,但是那一切都是以交互的方式运行的,如果想要一个完整的python版的bwlabel,还得再写写代码。
    由于一直没有给出完整的代码,所以很多观众对于bwlabel的运作方式还存在一些误解。这里就来说明一些主要的疑问。
    1. dmperm的作用是什么?
    由《读Matlab7.7 IPT的bwlabel函数(一)——bwlabel1的Python描述》中描述的bwlabel1的算法可知,在bwlabel运行的第一个阶段,bwlabel1这个函数是这样对图像进行标记的。对于如下的图像(x代表非零像素):
x 0
x 0
x x
0 x
x x
x 0
x 0
bwlabel1会从左往右按列扫描(因为Matlab是column-major的系统),每次发现非零像素簇时,就会进行标记,比如扫描完第一列后,会得到:
1 0
1 0
1 x
0 x
2 x
2 0
2 0
然后对第二列进行扫描,一开始发现第二列的那一簇与第一列的标记为1的簇是相邻的,因此将其标记为1:
1 0
1 0
1 1
0 1
2 1
2 0
2 0
但是接着就发现,第二列的这一簇与第一列中标记为2的簇也是相邻的。因此,标记2打错了!标记为2的簇与标记为1的簇是同一簇,不应该被打上不同的标签。
    为了能让后续的代码消除这种错误,bwlabel1的返回值中包含了两个列表rowEquivalences和colEquivalences,用于记录错误的标记。比如上面的例子,标签1和标签2属于同一个非零像素簇,那么此时rowEquivalences = [1]
colEquivalences = [2]
在执行完bwlabel1之后,rowEquivalences和colEquivalences中就记录了所有的错误标签。rowEquivalences[k]与colEquivalences[k]就是属于同一簇,但是打上的不同的标签。
    rowEquivalences和colEquivalences就是消除错误标签的关键数据了。看看下面的这个例子:
rowEquivalences = [1 3 5]
colEquivalences = [2 4 2]
可以看出1和2属于同一簇,3和4属于同一簇,5和2属于同一簇。再仔细观察,可以发现1,2,5是同一簇。于是合并错误标签的问题就变成了一个典型的无向非连通图的connected components的问题。在《读Matlab7.7 IPT的bwlabel函数(三)——如果是xialulee,会怎样》中,我们是用图的遍历来解决的。而Matlab则使用Dulmage-Mendelsohn decomposition来实现相同的功能。
    要使用Dulmage-Mendelsohn decomposition来获取图的connected components,首先需要用矩阵的形式来表达图。表达的方法在图论里好像叫做邻接矩阵。例如:
A[m, n] = 1
表示元素m到n有通路;
A[m, n] = 0
表示元素m到n没有通路。
    对于无向图,如果m到n有通路,则n到m也有通路,所以:
A[n, m] = 1 if A[m, n] = 1
因此无向图的矩阵是一个对称矩阵。又由于每个元素都可以到达自身,因此有:
A[n, n] = 1
因此无向图的矩阵是一个对角线元素为1的对称矩阵。
    Dulmage-Mendelsohn decomposition通过对这个对称矩阵进行行和列的交换,使其变成分块对角阵。则每一个分块对应图的一个connected component。在Matlab中,直接使用Matlab的dmperm函数即可实现Dulmage-Mendelsohn decomposition,如果使用其它的语言和平台,比如C/C++,Python,则可以借助csparse库(参见http://people.sc.fsu.edu/~burkardt/c_src/csparse/csparse.html)的cs_dmperm函数来实现。
    有很多观众在此提出了一个疑问:有时候csparse的cs_dmperm与Matlab的dmperm结果不同!这样还能给出最后的结果吗?要回答这个问题,还是得回顾Dulmage-Mendelsohn decomposition在bwlabel中的作用:找出错误标签的connected components。比如,如果元素1 2 5构成一个connected component,则可以写为:
1 2 5
1 5 2
2 1 5
2 5 1
都是一样的,在这里,元素出现的顺序并不重要,重要的是将属于一个connected component的元素放在一起。所以不要直接比较Matlab的dmperm和csparse的cs_dmperm的结果,而是要比较它们的分组结果
    这里选择一个实际的例子来说明如何检验dmperm的输出。数据来自《VC和matlab 测试dmperm函数的图像》
rowEquivalences = [28    28    13    13    28    13    13    13    28    13    28    28    13    13    13    28    13    28    28    13    28    13    28    28    13    28    13    13    13    20    20    20    20    26    20    13    13    26    20    13    20    20    26    13    20    20    20    20    13    20    13    20    26    20    13    20    20    23    20    23    20    15    13    23    20    20    18    19    20    20    20    19    20    13   

SPSS独立样本t检验结果分析

SPSS独立样本t检验结果分析 上图为独立样本T检验。 由下图的基本参数设置生成 结果解读:三步法 第一步:拿到两组核心基本统计量,对于数值变量,核心基本统计量就三个,样本量N,均值,标准差。...
  • aurorayqz
  • aurorayqz
  • 2017年04月09日 01:26
  • 13162

SPSS——均 值 检 验 (Compare Means)——配对样本T检验

简介用来检验来自两配对总体的均值是否在统计上有显著差异配对样本均数t检验简称配对t检验(paired t test),又称非独立两样本均数t检验,适用于配对设计计量资料均数的比较,其比较目的是检验两相...
  • liuyuan_jq
  • liuyuan_jq
  • 2016年07月12日 01:01
  • 3395

聚类有效性检验(Hubert'Γ )

问题的提出假设现在有N个样本需要聚类,根据某个聚类算法我们把这N个样本聚为K个簇,现在问题是怎么确定现在的聚类结果是有意义的,而不是仅仅通过随机得到的。下面我们将构造Hubert’Γ 统计量,通过假设...
  • tyh70537
  • tyh70537
  • 2017年08月06日 14:09
  • 313

SAS统计分析学习笔记(八)——T检验和非参数比较

1.简介 假设检验的第一个重要话题是两组比较。当满足一些假设时,我们采用T检验;不满足时,我们采用非参数比较。 2.T检验:两个平均数间的差异检验 实施T检验之前,需要满足一些假设:第一,两组必须是独...
  • csutxy
  • csutxy
  • 2017年09月07日 11:31
  • 658

机器学习(九) - - 模型评估和选择④比较检验

比较两个模型好坏
  • zmdsjtu
  • zmdsjtu
  • 2016年10月08日 16:37
  • 1969

SPSS中八类常用非参数检验之三:游程检验

一、定义  定义:单样本变量值的随机性检验是对某变量的取值出现是否随机进行检验,也称为游程检验(Run过程)。  单样本变量值的随机性检验是由Wald提出的,它的零假设为H0:总体某变量的变量值出现是...
  • downmoon
  • downmoon
  • 2012年03月26日 15:06
  • 10603

spss、R语言、Python数据分析系列(7):python-adf单位根检验

import pandas as pd import numpy as np import matplotlib.pyplot as plt import statsmodels.tsa.statto...
  • qq_26948675
  • qq_26948675
  • 2017年06月23日 11:17
  • 2078

非参数统计中t检验与符号检验的正确性判断

最近学习非参数统计,碰到一个样例,准确说明了若数据不服从正态分布,或有明显的偏态表现,应用t统计量和t检验推断未必能发挥较好的效果~ 这是一个课本上的例题,数据是16座预售楼盘均价,判断是否与媒体公...
  • qq_18149897
  • qq_18149897
  • 2017年09月18日 17:12
  • 429

python-期货指数的单位根检验

代码如下:              测试结果表明,以下33个品种不存在单位根. # -*- coding: utf-8 -*- """ Created on Thu Jun 22 17:03:1...
  • qq_26948675
  • qq_26948675
  • 2017年06月23日 13:49
  • 693

空间统计(五)诊断回归分析结果

为了理解、解释、预测某个问题,我们会进行回归分析。上一篇中提到了回归模型中的因变量和解释变量的概念,用一组解释变量来建模解释因变量,但事实上,选择一组优质的解释变量并不是那么容易。通常我们会根据一些常...
  • kikitaMoon
  • kikitaMoon
  • 2015年03月31日 14:52
  • 7877
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何检验dmperm的结果
举报原因:
原因补充:

(最多只允许输入30个字)