2014-11-13 2 views
-1

이미지의 한 점을 선택하고 다른 점의 RGB 값을이 점과 비교 한 다음 유사한 점의 색상을 변경하려고했지만 실패했습니다. 나는 코드의 정확성,하지만 중첩 루프에 대한 확실하지 않다과 절 경우 물건을의 matlab에 틱 방법이 아니다MATLAB을 사용하여 이미지의 색상 변형 비교

function exchangecolor() 
I1=imread('F:\28.jpg'); 
I2=imread('F:\29.jpg'); 
[m1,n1,x1]=(size(I1)); 
[m2,n2,x2]=size(I2); //[399,400,3]=size(I1)=size(I2) 
r1=I1(200,200,1); 
r2=I2(200,200,1); 

g1=I1(200,200,2); 
g2=I2(200,200,2); 

b1=I1(200,200,3); 
b2=I2(200,200,3); 

for i=1:m1 
    for j=1:n1 
     if abs(I1(i,j,1)-r1)<=10 
      if abs(I1(i,j,2)-g1)<=10 
       if abs(I1(i,j,3)-b1)<=10 
        I1(i,j,1)=r2; 
        I1(i,j,2)=g2; 
        I1(i,j,3)=b2; 
       end 
      end 
     end 
    end 
    end 
imwrite(I1,'F:\89.jpg','jpg'); 
+1

어떤 방법으로 실패 했습니까? –

+1

이미지를 게시 할 수있는 권리가 있다면 예제 이미지도 도움이 될 것입니다. 간단한 논리는 매우 쉬운 이미지에서만 작동합니다. –

+0

@Oliver 비교에서 얻은 '비슷한'점이 잘못되어 실패했습니다. 즉, 비슷한 점을 찾지 못했습니다. – Smile

답변

0

: 다음은 내 코드입니다.

는이 방법을 고려 유무 :

rgb1 = I1(200,200,:); 
rgb2 = I2(200,200,:); 
sel = all(abs(bsxfun(@minus, I1, rgb1)) <= 10, 3);%//need care when subtracting `uint` type! 
% replace 
for ci=1:3 
    tmp = I1(:,:,ci); 
    tmp(sel) = rgb2(ci); 
    I1(:,:,ci) = tmp; 
end 

내가 여기에 문제가 될 수있는 것을 생각할 수있는 유일한 방법은 I1 아마 유형 uint8이며 어떤 이유로 매트랩 힘든 시간 I1에서 rgb1을 뺀를 데이다 . I1double으로 전송하고 도움이되는지 확인해보세요.


PS, 그것은 not to use i and j as variable names in Matlab 최고
.

+0

도움과 조언에 감사드립니다. 나는 초보자이다. 다음 번에는 변수 이름에 더 많은 관심을 기울일 것입니다. – Smile

+0

하지만 제공하는 코드가 제대로 작동하지 않습니다. 내 논리가 실용적이지 않다고 생각합니다. – Smile

관련 문제