2015-08-18 2 views
3

Я построил трехмерную модель из 2D-изображения. Я хочу знать, насколько точна моя модель , используя статистический тест. Я думаю, что существует множество доступных методов, таких как корреляция и средние квадраты, упомянутые в этом вопросе, Is it possible to compare 3D images?.Как статистически проверить точность 3D-моделей?

Я не смог найти четкое описание доступных тестов на других сайтах. Я нашел реализацию, которая сравнивает 2D-изображения с использованием квадратных средств здесь, http://www.mathworks.com/matlabcentral/answers/81048-mse-mean-square-error. Я не уверен, что это можно использовать для расчета точности модели. Кроме того, я не нашел объяснения того, как работают тесты, т. Е. Какие параметры сравниваются (цвет, интенсивность и т. Д.)?

EDIT: Для большей ясности 3D-модель представляет каждый пиксель в 2D-изображении в виде воксела, который имеет цвет, связанный с ним. Целью этой модели является восстановление различных областей цвета, найденных в 2D-изображении, в 3D-представление. Таким образом, количество пикселей, которые имеют некоторый цвет (они представляют собой область), вычисляется из 2D-изображения. Подобное количество вокселей будет построено в 3D-модели и будет иметь тот же цвет. В этой проблеме моделирования имеет значение следующее:

1- размер областей (должен быть почти похож на 2D-изображение и модель).

2-Уровень связи области в 2D-изображении и соответствующей области, построенной в трехмерном изображении, должен быть аналогичным. Под связностью я имею в виду проверить, рассеяны ли компоненты региона по изображению или они связаны, образуя одну большую связанную область, а не много маленьких разбросанных областей того же цвета.

EDIT2: Я думаю, что цвет коррелогима подходит. Я нашел код, который его реализует, но мне это непонятно. Вот код,

% Soumyabrata Dev 
% E-mail: [email protected] 
% 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 

Это метод get_n,

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 

Может кто-нибудь, пожалуйста, уточнить, как работает этот код?

Код выше для автокоррелограммы не коррелограммой. Я читал, что первое лучше, но оно может вычислять только пространственную вероятность с использованием пикселей одинаковых цветов (нельзя применять к парам пикселей, которые имеют разные цвета). Это правильно?

Thank you.

+0

Я предлагаю, а не запрашивать подробный список с несколькими ответами, вы пытаетесь сфокусировать свой вопрос на цели своей модели (это для (повторной) визуализации, съемки, роботизированной навигации?) И дать характер ваших данных истины. Маленький код матлаба, который поможет объяснить, что может держать вещи в теме.Для того, чтобы метка точности была полезной, ее необходимо вычислить, * plus * она должна быть релевантной исходной проблеме, которую вы пытаетесь решить. –

+0

@NeilSlater Я редактировал вопрос. Пожалуйста, взгляните на это. Спасибо. – Dania

+2

Это, к сожалению, еще слишком велико. Я предлагаю вам ознакомиться с литературой для вашего поля, чтобы увидеть, как обычно используются методы, а затем выберите подходящую метрику на основе этой информации и ваши знания о ваших данных. – nkjt

ответ

1

TLDR: Классический рабочий:

  1. найти соответствующие функции в обеих моделях,
  2. вычислить расстояние,
  3. ??????,
  4. PROFIT !!
+0

Благодарю вас, я уже построил свой собственный алгоритм, который имеет некоторые сходные аспекты с теми, о которых вы упоминали. Спасибо за предоставление этого полезного ответа. – Dania

 Смежные вопросы

  • Нет связанных вопросов^_^