我已经从2D图像构建了一个3D模型。我想知道我的模型使用某种统计测试的准确程度。我认为有很多可用的方法可以做到这一点,如本问题Is it possible to compare 3D images?中提到的相关和均方。
我无法找到其他网站中可用测试的清晰描述。我找到了一个实现,它使用方形平均值来比较2D图像,http://www.mathworks.com/matlabcentral/answers/81048-mse-mean-square-error。我不确定这是否可用于计算模型精度。另外,我没有找到测试工作原理的解释,即比较了什么参数(颜色,强度等)?
编辑:为了更加清晰,3D模型将2D图像中的每个像素表示为具有与之关联的颜色的体素。该模型的目的是将2D图像中找到的不同颜色区域重建为3D表示。因此,从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
这是方法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
有人可以澄清一下这段代码是如何运作的吗?
以上代码适用于 autocorrelogram 而不是 correlogram 。我已经读过第一个更好,但它只能使用相同颜色的像素来计算空间概率(不能应用于具有不同颜色的像素对)。这是正确的吗?
谢谢。
答案 0 :(得分:1)
TLDR:经典工作流程: