小编Stu*_*PhD的帖子

理解高斯混合模型的概念

我正在尝试通过阅读在线提供的资料来了解GMM.我已经使用K-Means实现了聚类,并且看到GMM将如何与K-means进行比较.

这是我所理解的,如果我的概念错了,请告诉我:

GMM就像KNN一样,在这两种情况下都实现了聚类.但在GMM中,每个群集都有自己独立的均值和协方差.此外,k-means执行数据点到集群的硬分配,而在GMM中,我们得到一组独立的高斯分布,并且对于每个数据点,我们有一个它属于其中一个分布的概率.

为了更好地理解它,我使用MatLab对其进行编码并实现所需的聚类.我使用SIFT功能进行特征提取.并使用k-means聚类来初始化值.(这来自VLFeat文档)

%images is a 459 x 1 cell array where each cell contains the training image
[locations, all_feats] = vl_dsift(single(images{1}), 'fast', 'step', 50); %all_feats will be 128 x no. of keypoints detected
for i=2:(size(images,1))
    [locations, feats] = vl_dsift(single(images{i}), 'fast', 'step', 50);
    all_feats = cat(2, all_feats, feats); %cat column wise all features
end

numClusters = 50; %Just a random selection.
% Run KMeans to pre-cluster the data
[initMeans, assignments] = vl_kmeans(single(all_feats), numClusters, ...
    'Algorithm','Lloyd', ...
    'MaxNumIterations',5); …
Run Code Online (Sandbox Code Playgroud)

matlab classification cluster-analysis machine-learning mixture-model

24
推荐指数
1
解决办法
2万
查看次数

了解openCV 2.4中感兴趣的区域

我知道在OpenCV 2.1中我们有一个设置ROI的函数:cvSetImageROI(),但这样的函数在2.4中不存在(或者至少我无法在其手册和帮助部分找到它.)

但是,这是我能找到的唯一有用的代码,它使用opencv 2.4进行法师的投资回报率,但我无法理解它:

// define image ROI
cv::Mat imageROI;
imageROI= image(cv::Rect(385,270,logo.cols,logo.rows));
// add logo to image 
cv::addWeighted(imageROI,1.0,logo,0.3,0.,imageROI);
Run Code Online (Sandbox Code Playgroud)

在这里,他们希望在原始图像右下方的大图像中添加一个非常小的日志.

所以我从这里了解到,创建另一个矩阵来保持ROI.使用rect函数给出的尺寸和尺寸等于他们想要添加的小徽标的尺寸.

然后thsi让我困惑:cv::addWeighted(imageROI,1.0,logo,0.3,0.,imageROI);这里addWeighted的源1是ROI维度集,源2是徽标,目标也是ROI维度集.它是否正确?还是我错过了什么?

在此之后,显示结果并将徽标添加到大图像中.在这些命令中包含了大图像.

在此之前我也想尝试自己的代码,以帮助澄清情况.但我收到此错误,因为无法识别image():'image': identifier not found

int _tmain(int argc, _TCHAR* argv[])
{
Mat src1, imageROI, logo;

logo = imread("c:\\car1.jpg", -1);

imageROI= image(Rect(385,270,logo.cols,logo.rows));

addWeighted(imageROI,1.0,logo,0.3,0.,imageROI);


namedWindow("meh", CV_WINDOW_AUTOSIZE);
imshow("meh", imageROI);
waitKey(0);


return 0;
Run Code Online (Sandbox Code Playgroud)

}

c++ opencv

13
推荐指数
1
解决办法
3万
查看次数

在verilog中划分

我在教自己verilog.我在介绍章节中说过要执行除法的书,我们使用'/'运算符或'%'运算符.在后面的章节中,它说分割对于verilog而言太复杂而且无法合成,因此为了执行除法,它引入了一个长算法.

所以我很困惑,不能verilog处理简单划分?/运营商没用吗?

verilog

11
推荐指数
4
解决办法
6万
查看次数

不显示.net对象的属性和方法

我有.NET程序集文件,我需要它在MATLAB中工作.(该库是用C#创建的,我有相应的源代码)

文档之后,我发现以下命令将在MATLAB中加载程序集并使其类可用于"在MATLAB中".但它似乎没有起作用.我用它来加载文件:

  color = NET.addAssembly('c:\path\to\file\EvolutionMapsClassLib.dll');
Run Code Online (Sandbox Code Playgroud)

加载很好,我在工作区中看到一个1x1 .NET程序集对象.当我输入时,color我得到以下结果:

  color = 

    NET.Assembly handle
    Package: NET

  Properties for class NET.Assembly:

      AssemblyHandle
      Classes
      Structures
      Enums
      GenericTypes
      Interfaces
      Delegates
Run Code Online (Sandbox Code Playgroud)

所以显然它已经正确加载,而且打字color.Classes提供以下内容:

  >> color.Classes

  ans = 

      'EvolutionMaps.EvolutionMap'
      'EvolutionMaps.EvolutionMap+EstimationResults'
      'EvolutionMaps.PrincipalDirectionEvolutionMap'
      'EvolutionMaps.CharacterDimensionsEstemator'
      'EvolutionMaps.MapBlob'
      'EvolutionMaps.MapsMetric'
      'EvolutionMaps.MapsMetric+MapMinimalComparable'
      'EvolutionMaps.MapsL2Distance'
      'EvolutionMaps.DiagonalEvolutionMap'
      'EvolutionMaps.EvolutionMapGenerator'
      'EvolutionMaps.HeightEvolutionMap'
      'EvolutionMaps.FullnessEvolutionMap'
      'EvolutionMaps.YvalEvolutionMap'
      'EvolutionMaps.ImageExtractor'
      'EvolutionMaps.HorisontalProjectionDistance'
      'EvolutionMaps.StrokeWidthEvolutionMap'
      'EvolutionMaps.ConnectedComponentsFinder'
      'EvolutionMaps.ColorMap'
      'EvolutionMaps.ColorMap+GrayColorMap'
      'EvolutionMaps.ColorMap+JetColorMap'
      'EvolutionMaps.TransitionAvgEvolutionMap'
      'EvolutionMaps.PrincipalProjectionEvolutionMap'
      'EvolutionMaps.ConnectedComponent'
      'EvolutionMaps.WidthEvolutionMap'
Run Code Online (Sandbox Code Playgroud)

这似乎运作良好,但根据在线帮助,为了与这些类进行交互,我需要知道方法和属性.

这是我遇到问题的地方,既不是properties也不行methods.我尝试了每个变体来获取属性或方法列表但我不断收到此错误:

  >> properties color.EvolutionMaps.ColorMap

  No properties for class color.EvolutionMaps.ColorMap or no class color.EvolutionMaps.ColorMap.

  >> properties color.Classes.EvolutionMaps.ColorMap …
Run Code Online (Sandbox Code Playgroud)

.net c# matlab .net-assembly matlab-deployment

7
推荐指数
1
解决办法
1753
查看次数

了解提取的要素的编码

我关注的编码是fisher编码,因为我已经证明我的工作效果最好.所以我想在我提取的(SIFT)功能上测试Fisher编码,并测试系统的性能,无论是否编码.

而不是重新开始我发现vl_feat有一个用于fisher编码的内置库,他们有一个教程,并在这里链接

现在我已经完成了所需的大部分工作,但实际上编码的内容让我感到困惑,例如教程清楚地表明使用GMM获得的参数执行Fisher编码,例如[means, covariances, priors]SIFT提取的特征将在这里使用在GMM中根据教程:

Fisher编码使用GMM来构建可视单词字典.为了举例说明构建GMM,考虑许多二维数据点.实际上,这些点将是SIFT或其他本地图像特征的集合.

numFeatures = 5000 ;
dimension = 2 ;
data = rand(dimension,numFeatures) ;

numClusters = 30 ;
[means, covariances, priors] = vl_gmm(data, numClusters);
Run Code Online (Sandbox Code Playgroud)

一旦我执行了这一步,我将编码另一个数据集?这让我很困惑.我已经使用我提取的SIFT功能生成GMM的参数.

接下来,我们创建另一组随机向量,这些向量应使用Fisher Vector表示和刚刚获得的GMM进行编码:

encoding = vl_fisher(datatoBeEncoded, means, covariances, priors);
Run Code Online (Sandbox Code Playgroud)

所以这encoded是最终的结果,但它编码了什么?我想要从我的图像中提取的SIFT功能进行编码,但是如果我按照GMM中使用的教程进行编码.如果是这样的话,那是datatoBeEncoded什么?我是否再次使用SIFT专长?

谢谢

更新:

@Shai

谢谢,但我相信我一定做错了.我不太明白你的意思是"将图像与自己比较".我有4个班,每班1000个图像.所以我使用了第1类中的前600个图像来学习gmm参数,然后使用这些参数来编码fisher矢量

numClusters = 128 ;
[means, covariances, priors] = vl_gmm(data, numClusters);
Run Code Online (Sandbox Code Playgroud)

所以每个means, covariances都有大小128 x 128和尺寸的前辈1 x 128

现在,当我使用这些函数来对400幅图像上的fisher矢量进行编码时

encoding = vl_fisher(datatoBeEncoded, means, covariances, priors);
Run Code Online (Sandbox Code Playgroud)

编码的大小是非常不同的,大小的东西 …

matlab encoding classification image-processing feature-detection

5
推荐指数
1
解决办法
1512
查看次数

选择显示PCA差异最大的组件

我有一个庞大的数据集(32000*2500),我需要进行培训.这对于我的分类器来说似乎太过分了,所以我决定对维数降低进行一些阅读,特别是对PCA进行阅读.

根据我的理解,PCA选择当前数据并在另一个(x,y)域/规模上重新创建它们.这些新坐标并不意味着什么,但数据被重新排列以给出一个轴最大变化.在这些新系数之后,我可以放弃cooeff具有最小变化.

现在我试图在MatLab中实现它,并且在提供的输出方面遇到了麻烦.MatLab始终将行视为观察,将列视为变量.所以我的pca函数是我的大小矩阵(32000*2500).这将在大小的输出矩阵中返回PCA系数2500*2500.

pca的帮助说明:

每列coeff包含一个主成分的系数,列按成分方差的降序排列.

在此输出中,哪个维度是我的数据的观察?我的意思是,如果我必须将它提供给分类器,那些行coeff代表我的数据观察还是现在是列的coeff

如何删除变化最小的系数?

matlab classification machine-learning pca dimensionality-reduction

5
推荐指数
1
解决办法
472
查看次数

试图理解matlab中高斯模糊的实现

我试图将扫描的文本文档模糊到文本行被模糊为黑色的程度.我的意思是文本相互融合,我看到的只是黑色线条.

我是MATLAB的新手,虽然我知道基础知识,但我无法使图像模糊不清.我读过这个:Gaussian Blurr,根据sigma函数管理/决定模糊.但这并不是我写的代码中的工作原理.

在尝试学习Matlab中的高斯模糊时,我发现它是通过使用这个函数实现的: fspecial('gaussian',hsize,sigma);

所以显然有两个变量hsize指定函数中的行数或列数,而sigma标准偏差.

有人可以解释一下hsize这里的重要性以及为什么它对结果的影响要大得多sigma

为什么即使我增加到sigma一个非常高的值,模糊器也不会受到影响,但是通过增加图像会使图像失真很多hsize

这是我的代码:

img = imread('c:\new.jpg');

h = fspecial('gaussian',hsize,sigma);

out = imfilter(img,h);

imshow(out);
Run Code Online (Sandbox Code Playgroud)

并附上结果:

为什么它不仅受到控制sigma?扮hsize演什么角色?为什么我不能让它模糊文本而不是扭曲整个图像?

谢谢

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

matlab distribution image-processing gaussian

4
推荐指数
1
解决办法
4757
查看次数

如何查找单元格数组中最后一个非空元素的索引

我初始化了一个很长的单元格数组(向量?)

train_labels = cell(16218, 1);
Run Code Online (Sandbox Code Playgroud)

这些将使用来自50个不同文件夹的文件填充,以确保文件在正确的位置编入索引,我需要写入的最后一个单元格数组的索引.

例如,在读取一个文件夹后,train_labels已达到索引5406.现在要从下一个文件夹中读取图像,必须将它们保存到下一个索引中5407.为了完成这项工作,我需要找到最后一个非空数组的位置train_labels.

由于简单find(train_labels,1,'last')不适用于单元阵列.我用过,cellfun但也没用.这是我试过的:

cellfun(@find, train_labels, 'last')
Error using cellfun
Input #3 expected to be a cell array, was char instead.
Run Code Online (Sandbox Code Playgroud)

非常感谢有关如何获取单元格数组的最后一个索引的任何指导.

谢谢

arrays matlab vector cell-array

4
推荐指数
1
解决办法
1940
查看次数

使用blockproc或im2col在图像上重叠滑动窗口?

我必须应用于dct2我的图像的小窗口,最好使用重叠窗口.

我发现,有在Matlab两种功能,可以使这一切成为可能blockprocim2col.我也很难理解,并希望得到一些澄清.

blockproc可以用于使用BorderSizeTrimBorder参数在滑动窗口上实现我的函数.

B = blockproc(A,[64,64],fun,'BorderSize',[5,5], 'TrimBorder', 'false');
Run Code Online (Sandbox Code Playgroud)

我意识到这会创建一个块[64 + 2*5, 64 + 2*5]@fun在每个块上应用该函数.但由于我无法@fun在调试中进入我的功能以验证正确的操作,我不能确定这是我需要的.我的上述代码是否符合我的要求?我知道我得到了一个连续的结果,B但它应该在一个重叠的滑块上.这会实现我的需求吗?

第二是im2col.im2col(A,[m n],block_type)将块分成m个n块并将它们排列成列,所以每列是一个块?如果是这样,重叠如何控制?如果每个块都是一列,我可以dct2在每列上成功应用该功能吗?因为我怀疑它会将向量作为输入吗?

一些澄清将不胜感激.

matlab image image-processing dct image-segmentation

4
推荐指数
1
解决办法
4218
查看次数

OpenCV inRange() 适用于 RGB 但不适用于 HSV 色彩空间

我已经以 RGB 和 HSV 格式生成了我的图像的散点图,并且我正在使用inRange()通过观察该图来设置单一颜色的阈值。

为了获得准确的 RGB 和 HSV 值,我使用paint.net 的颜色选择器来获取 RGB 值,然后使用RGB 到 HSV 转换器来获取 HSV 值。

在此处输入图片说明

像素颜色和散点图由以下生成:

img = cv2.imread('C:\\b_.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)


pixel_colors = img.reshape((np.shape(img)[0]*np.shape(img)[1], 3))
norm = colors.Normalize(vmin=-1., vmax=1.)
norm.autoscale(pixel_colors)
pixel_colors = norm(pixel_colors).tolist()

h, s, v = cv2.split(img_hsv)
fig = plt.figure()
axis = fig.add_subplot(1, 1, 1, projection="3d")

axis.scatter(h.flatten(), s.flatten(), v.flatten(), facecolors=pixel_colors, marker=".")
axis.set_xlabel("Hue")
axis.set_ylabel("Saturation")
axis.set_zlabel("Value")
plt.show()
Run Code Online (Sandbox Code Playgroud)

我需要从我的图像中提取黄色。如前所述,我使用paint.net 颜色选择器来获取浅黄色和深黄色的RGB 值。然后使用转换器获取inRange()函数的 HSV 值。

light_yellow = (60, 89, 97)    # HSV VALUES …
Run Code Online (Sandbox Code Playgroud)

python opencv colors image-processing computer-vision

4
推荐指数
1
解决办法
2626
查看次数