2015-06-08 21 views
0

我使用MATLAB對顯示器的校準模型的位置...... 我需要找到值遵循降低成本computaional在尋找最小距離

for a1 = 1:s1 
for j = 1:s2 
    c=0; 
for i = 1:257; 
    if ((XYZ1(a1,j,1)-r1(1,i))<0.5) 
     rgb(a1,j,1) = a(i); 
     c=c+1; 
     break; 
    end 
end 

if ((c ==0)|(rgb>255)) 
    rgb(j,1)=255; 
end 
c=0; 
for i = 1:257; 
    if ((XYZ1(a1,j,2)-r1(2,i))<0.5) 
     rgb(a1,j,2) = a(i); 
     c=c+1; 
     break; 
    end 
end 


if ((c ==0)|(rgb>255)) 
    rgb(a1,j,2)=255; 
end 
c=0; 

for i = 1:257; 
    if ((XYZ1(a1,j,3)-r1(3,i))<0.5) 
     rgb(a1,j,3) = a(i); 
     c=c+1; 
     break; 
    end 
end 
if ((c ==0)|(rgb>255)) 
    rgb(a1,j,3)=255; 
    c=c+1; 
end 

end 
a1 
end 

我的代碼是工作非常精細和結果是好的...但唯一的問題是計算成本,因爲XYZ1的大小是2448x2048x3,所以這三個循環如果條件需要很多時間。我需要幫助來降低計算成本。基本上,這三個迴路是造成延遲

for i = 1:257; 
    if ((XYZ1(a1,j,1)-r1(1,i))<0.5) 
     rgb(a1,j,1) = a(i); 
     c=c+1; 
     break; 
    end 
end 

if ((c ==0)|(rgb>255)) 
    rgb(j,1)=255; 
end 
c=0; 
for i = 1:257; 
    if ((XYZ1(a1,j,2)-r1(2,i))<0.5) 
     rgb(a1,j,2) = a(i); 
     c=c+1; 
     break; 
    end 
end 


if ((c ==0)|(rgb>255)) 
    rgb(a1,j,2)=255; 
end 
c=0; 

for i = 1:257; 
    if ((XYZ1(a1,j,3)-r1(3,i))<0.5) 
     rgb(a1,j,3) = a(i); 
     c=c+1; 
     break; 
    end 
end 
if ((c ==0)|(rgb>255)) 
    rgb(a1,j,3)=255; 
    c=c+1; 
end 

任何建議將高度讚賞

回答

0

您可以使用邏輯索引或find,而不是你的循環。因此,而不是

c = 0; 
for i = 1:257; 
    if ((XYZ1(a1,j,1)-r1(1,i))<0.5) 
     rgb(a1,j,1) = a(i); 
     c=c+1; 
     break; 
    end 
end 

,您可以:

c = find((XYZ1(a1,j,1)*ones(1,257) - r1(1,1:257)) > 0.5, 1, 'last'); 
if (~isempty(c)) 
    rgb(ai,j,1) = a(c-1); 
else 
    c = 0; 
end 
+0

謝謝你這是爲我工作很細...但我有一點點混亂 對於i = 1:257; ((XYZ1(a1,j,1)-r1(1,i))>(XYZ1(a1,j,1)-r1(1,1)) rgb(a1,j,1) = a(i); c = c + 1; 休息; 結束 結束 那我現在該怎麼辦? – farhan

+0

我不明白你的意思。 –