Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何统计测试3D模型的准确性?_Matlab_Image Processing_3d_Statistics_Modeling - Fatal编程技术网

Matlab 如何统计测试3D模型的准确性?

Matlab 如何统计测试3D模型的准确性?,matlab,image-processing,3d,statistics,modeling,Matlab,Image Processing,3d,Statistics,Modeling,我已经建立了一个二维图像的三维模型。我想通过一些统计测试来知道我的模型有多精确。我认为有很多方法可以做到这一点,比如这个问题中提到的相关性和均方 我找不到其他网站上可用测试的清晰描述。我在这里找到了一个使用平方平均值比较2D图像的实现。我不确定这是否可以用来计算模型的精度。此外,我没有找到测试工作原理的解释,即比较哪些参数(颜色、强度等) 编辑:为了更清晰,3D模型将2D图像中的每个像素表示为具有相关颜色的体素。该模型的目的是将二维图像中的不同颜色区域重建为三维表示。因此,从2D图像计算具有某种

我已经建立了一个二维图像的三维模型。我想通过一些统计测试来知道我的模型有多精确。我认为有很多方法可以做到这一点,比如这个问题中提到的相关性和均方

我找不到其他网站上可用测试的清晰描述。我在这里找到了一个使用平方平均值比较2D图像的实现。我不确定这是否可以用来计算模型的精度。此外,我没有找到测试工作原理的解释,即比较哪些参数(颜色、强度等)

编辑:为了更清晰,3D模型将2D图像中的每个像素表示为具有相关颜色的体素。该模型的目的是将二维图像中的不同颜色区域重建为三维表示。因此,从2D图像计算具有某种颜色(它们代表一个区域)的像素数。将在3D模型中构造相似数量的体素,并提供相同的颜色。在这个建模问题中,重要的是:

1-区域的大小(在2D图像和模型中必须几乎相似)

2-2D图像中的区域与其在3D图像中构建的对应区域的连接级别必须相似。通过连接性,我的意思是检查区域组件是否分散在图像中,或者它们连接起来形成一个大的连接区域,而不是许多相同颜色的小分散区域

EDIT2:我认为颜色相关图是合适的。我找到了一个实现它的代码,但我不清楚。这是密码

% Soumyabrata Dev
% E-mail: soumyabr001@e.ntu.edu.sg
% http://www3.ntu.edu.sg/home2012/soumyabr001/
I= imread ('img.jpg');
correlogram_vector=[];
[Y,X]=size(rgb2gray(I));

% quantize image into 64 colors = 4x4x4, in RGB space
[img_no_dither, ~] = rgb2ind(I, 64, 'nodither');
% figure, imshow(img_no_dither, map);
%rgb = ind2rgb(img_no_dither, map); % rgb = double(rgb)
distance_vector= [1 3]; 
[~,d]=size(distance_vector);
count_matrix=zeros(64,d);   total_matrix=zeros(64,d);
prob_dist=cell(1,d);

for serial_no=1:1:d
    for x=1:X
        for y=1:Y
            color=img_no_dither(y,x);

            % At the given distance 
            [positive_count,total_count]=get_n(distance_vector(serial_no),x,y,color,img_no_dither,X,Y);
            count_matrix(color+1,serial_no)=count_matrix(color+1,serial_no)+positive_count;
            total_matrix(color+1,serial_no)=total_matrix(color+1,serial_no)+total_count;       
        end
    end

    prob_dist{serial_no}=count_matrix(:,serial_no)./(1+total_matrix(:,serial_no));

end

for serial_no=1:d
    correlogram_vector=cat(1,correlogram_vector,prob_dist{serial_no});
end

end
这是获取的方法

function [positive_count,total_count]=get_n(n,x,y,color,img_no_dither,X,Y)
% This function is useful to get the validity map of the neighborhood case.
% It can handle any number of neighborhood distances.

% Input
% n=The order of the neighborhood
% x & y= x y co-ordinates of the given pixel
% color= particular quantized color
% img_no_dither= The color quantized image matrix
% X & Y= The original dimensions of the input image

% Output
% positive_count= The number of occurences which have the same color
% total_count= The total number of valid cases for this particular instant


    valid_vector8n=zeros(1,8*n); % This is because of the propoerty of inf-norm. Each distance has 8 times the order
    positive_count=0;   total_count=0;

    nbrs_x=zeros(1,8*n);    nbrs_y=zeros(1,8*n);

    % The counting of the pixels is done in the following manner: From the
    % given pixel, go left-->up-->right-->down-->left-->up
    % Y co-ordinates of nbrs
    nbrs_y(1)=y;
    d=1;
    for k=2:1+n
       nbrs_y(k)=y-d;
       d=d+1;
    end

    nbrs_y(1+n:1:3*n+1)=y-n;

    d=0;
    for k=3*n+1:5*n+1
       nbrs_y(k)=y-n+d;
       d=d+1;
    end

    nbrs_y(5*n+1:1:7*n+1)=y+n;

    d=0;
    for k=7*n+1:1:7*n+1+(n-1)
       nbrs_y(k)=y+n-d;
       d=d+1;
    end

    % X co-ordinates of nbrs
    nbrs_x(1)=x-n;

    nbrs_x(2:1:1+n)=x-n;

    d=0;
    for k=1+n:1:3*n+1
        nbrs_x(k)=x-n+d;
        d=d+1;
    end

    nbrs_x(3*n+1:5*n+1)=x+n;

    d=0;
    for k=5*n+1:7*n+1
        nbrs_x(k)=x+n-d;
        d=d+1;
    end

    nbrs_x(7*n+1:7*n+1+(n-1))=x-n;

    % Assigning the validity of the neighborhood
    for i=1:8*n

        if nbrs_x(i)>0 && nbrs_x(i)<=X && nbrs_y(i)>0 && nbrs_y(i)<=Y
            valid_vector8n(i)=1;

        else
            valid_vector8n(i)=0;

        end

    end


    % Couting the number of common colors in the valid areas of the
    % neighborhood.
    for j=1:8*n
       if valid_vector8n(j)==1
          data= img_no_dither(nbrs_y(j),nbrs_x(j));
          if (data==color)
              positive_count=positive_count+1;
          end
          total_count=total_count+1;
       end
    end

end
函数[正计数,总计数]=get\n(n,x,y,颜色,img\u无抖动,x,y)
%该函数用于获取邻域案例的有效性映射。
%它可以处理任意数量的邻域距离。
%输入
%n=邻域的顺序
%x&y=给定像素的x&y坐标
%颜色=特定的量化颜色
%img_no_抖动=彩色量化图像矩阵
%X&Y=输入图像的原始尺寸
%输出
%正计数=具有相同颜色的发生次数
%total_count=此特定瞬间的有效案例总数
有效向量8n=零(1,8*n);%这是因为inf规范的固有性。每个距离是顺序的8倍
正计数=0;总计数=0;
nbrs_x=零(1,8*n);nbrs_y=零(1,8*n);
%像素的计数按以下方式进行:从
%给定像素,向左-->向上-->向右-->向下-->向左-->向上
%NBR的Y坐标
nbrs_y(1)=y;
d=1;
对于k=2:1+n
nbrs_y(k)=y-d;
d=d+1;
结束
nbrs_y(1+n:1:3*n+1)=y-n;
d=0;
对于k=3*n+1:5*n+1
nbrs_y(k)=y-n+d;
d=d+1;
结束
nbrs_y(5*n+1:1:7*n+1)=y+n;
d=0;
对于k=7*n+1:1:7*n+1+(n-1)
nbrs_y(k)=y+n-d;
d=d+1;
结束
%NBR的X坐标
nbrs_x(1)=x-n;
nbrs_x(2:1:1+n)=x-n;
d=0;
对于k=1+n:1:3*n+1
nbrs_x(k)=x-n+d;
d=d+1;
结束
丁腈橡胶x(3*n+1:5*n+1)=x+n;
d=0;
对于k=5*n+1:7*n+1
nbrs_x(k)=x+n-d;
d=d+1;
结束
丁腈橡胶x(7*n+1:7*n+1+(n-1))=x-n;
%分配邻域的有效性
对于i=1:8*n

如果nbrs_x(i)>0&&nbrs_x(i)0&&nbrs_y(i)TLDR:经典工作流:

  • 在两个模型中找到匹配的特征
  • 计算距离
  • "",
  • 利润
    我建议你不要问一个有多个答案的详细清单,而是试着把问题集中在你的模型的目的上(是否用于(重新)可视化艺术品、测量、机器人导航?),并给出你的地面真实数据的性质。一个小的matlab代码来帮助解释,可以保持主题的东西。要使精度指标变得有用,需要能够计算它,并且需要与您试图解决的原始问题相关。@NeilSlater我编辑了这个问题。请看一看。谢谢。不幸的是,这仍然太宽泛了。我建议您查看您所在领域的文献,了解常用的方法,然后根据这些信息和您对数据的了解选择适当的度量。您似乎希望比较从3d模型重建的某些度量与直接从基础2d图像提取的度量。到现在为止,一直都还不错。然而,我看不到任何方法在这里进行统计测试,因为您只有一个实例。对于任何类型的测试,您都需要一个样本,例如图像样本和相应的3d模型。另外,要检验的无效假设是什么?对不起,我也不认为这会发生在三种不同的切割上。通常,不同的样本值需要在统计上独立。你可以在stats.SE上试试运气(标记你的问题并让主持人把它移到那里),但我并不乐观。谢谢你,我已经建立了自己的算法,它有一些与你提到的类似的方面。谢谢你提供了这个有用的答案。