小编Che*_*ung的帖子

协方差矩阵的缩放

对于问题"在MATLAB中围绕数据的椭圆"这个问题,在Amro给出答案中,他说:

"如果您希望椭圆表示特定的标准偏差水平,那么正确的做法是通过缩放协方差矩阵"

并且缩放它的代码给出为

STD = 2;                     %# 2 standard deviations
conf = 2*normcdf(STD)-1;     %# covers around 95% of population
scale = chi2inv(conf,2);     %# inverse chi-squared with dof=#dimensions

Cov = cov(X0) * scale;
[V D] = eig(Cov);
Run Code Online (Sandbox Code Playgroud)

我不明白上面代码片段的前3行.如何计算比例chi2inv(conf,2),以及将它与共变矩阵相乘背后的基本原理是什么?

附加问题:

我还发现如果我使用1.5 STD(即86%的瓷砖)进行缩放,椭圆可以覆盖所有点,我的点集在几乎所有情况下都会聚集在一起.另一方面,如果我使用3个STD(即99%的瓷砖)进行缩放,则椭圆太大.那么我怎样才能选择STD来紧紧覆盖丛生点呢?

这是一个例子:

内椭圆对应于1.5 STD,外对应于2.5 STD.为什么1.5 STD紧紧覆盖了丛生的白点?是否有任何方法或理由来定义它?

在此输入图像描述

math matlab ellipse

8
推荐指数
1
解决办法
3829
查看次数

Matlab中标记控制流域的过分割

我在Matlab中实现标记控制分水岭时遇到了问题.

输入图像是具有两个聚类对象的二进制掩码.另一个图像是另一个二进制图像,其中白色区域表示标记.

图片 标记

然后我尝试使用标记控制的分水岭来分割聚类对象.代码如下:

bw=imread('Im.jpg'); % read image
bwMarker=imread('Marker.jpg');% read marker
bw(bwMarker)=0; % impose the marker on the image
L=watershed(bw);% do the watershed
%% plot
rgb = label2rgb(L,'jet',[.5 .5 .5]);
figure(2), imshow(rgb,'InitialMagnification','fit')
title('Marker Controlled Watershed transform ')
Run Code Online (Sandbox Code Playgroud)

结果显示为此图.

在此输入图像描述
它将对象分成两部分,但形状并不完整.我想得到整个对象,但只是将两条线分开(如下图所示)任何人都可以帮助我吗?谢谢.

在此输入图像描述

附加问题:感谢yoda提供的答案.然而,在这种情况下,使用"cityblock"的距离变换是好的,但如果我们使用"euclidean",它将导致过度分割.因为分水岭将取决于图像中的局部最小值,并且"城市街区"距离变换导致正确的局部最小数量是一致的.如果我们将"cityblock"应用于其他图片,也会导致过度细分.现在让我们看看yoda的代码:

img=im2bw(imread('http://i.stack.imgur.com/qrYCL.jpg'));

imgDist=-bwdist(~img,'cityblock');
imgDist(~img)=-inf; 

% check local minimums
BW = imregionalmin(imgDist);
figure(1), imshow(BW);  
title('Regional Minima in Original Image');

imgLabel=watershed(imgDist); 
Run Code Online (Sandbox Code Playgroud)

局部最小值和结果如下所示:

在此输入图像描述在此输入图像描述

请注意,在左图中,局部最小值显示为白色区域.据观察,只有两个局部最小值显示在聚类对象中.因此导致了良好的结果.

现在让我们来看看使用'euclidean'的距离变换.

imgDist=-bwdist(~img);
imgDist(~img)=-inf; 

% check local minimums    
BW = imregionalmin(imgDist);
figure(1), imshow(BW);  
title('Regional Minima in Original Image');

imgLabel=watershed(imgDist);    

imshow(imgLabel==0,'InitialMagnification','fit')
Run Code Online (Sandbox Code Playgroud)

局部最小值和结果如下所示:

在此输入图像描述在此输入图像描述

请注意,在左图中,局部最小值显示为白色区域.观察到在聚类对象区域中显示了许多局部最小值.因此,这会导致过分割的结果. …

matlab image-processing

8
推荐指数
1
解决办法
8494
查看次数

使用Matlab在二进制图中查找凹面像素/点

在Matlab中给出带有对象的二进制掩码.我将找到对象边界的凹度点.这里我所说的凹点是相对于凹陷区域B_1,B_2,B_3中分别与凸包壳弦K_1,K_2和K_3的欧几里德距离的最深凹点.红点表示我想要找到的凹度点,其中在凹陷区域B_1中我绘制垂直于弦K_1的三条线,最深的凹点是中间的,因为它具有最大的长度.

在此输入图像描述

任何人都有有效的方式/代码来做到这一点?谢谢.

下图中的另一个图给出了凸包的示例,其中红点表示有效的凹度点.

在此输入图像描述

matlab image-processing detection

6
推荐指数
1
解决办法
2979
查看次数

标签 统计

matlab ×3

image-processing ×2

detection ×1

ellipse ×1

math ×1