Я построил трехмерную модель из 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.
Я предлагаю, а не запрашивать подробный список с несколькими ответами, вы пытаетесь сфокусировать свой вопрос на цели своей модели (это для (повторной) визуализации, съемки, роботизированной навигации?) И дать характер ваших данных истины. Маленький код матлаба, который поможет объяснить, что может держать вещи в теме.Для того, чтобы метка точности была полезной, ее необходимо вычислить, * plus * она должна быть релевантной исходной проблеме, которую вы пытаетесь решить. –
@NeilSlater Я редактировал вопрос. Пожалуйста, взгляните на это. Спасибо. – Dania
Это, к сожалению, еще слишком велико. Я предлагаю вам ознакомиться с литературой для вашего поля, чтобы увидеть, как обычно используются методы, а затем выберите подходящую метрику на основе этой информации и ваши знания о ваших данных. – nkjt