2011-04-05 4 views
0

RGB 이미지의 모든 비트를 dec2bin() 함수로 이진 (픽셀 색상 단위)으로 변환 한 후 XOR하고 싶습니다. 먼저 scr(8)=0을 모두 0을 포함한다고 선언했는데, 내가 원하는 것은 ar(1)=xor(scr(1),pic(1))이 완료되면 , scr(7)=scr(8), scr(8)=ar(1) 등등에 저장해야합니다. 코드를 작성했지만 많이 사용합니다. 처리 할 시간. 코드 속도를 높이는 방법을 알고 있다면 저를 도우십시오. 나는 여기에 붙어있어 최종 프리젠 테이션을 앞두고있다.RGB 이미지의 모든 색상을 XOR 처리하면서 왼쪽 시프트를 구현하는 빠른 알고리즘

이 내 코드입니다 :

pic=imread('peppers.png'); 
[imr,imc,clr]=size(pic); 
scr(8)=0; 
i=8; 
img2=pic; 
pic2(8)=0; 
pic1(8)=0; 
for row=1:imr; 

    for col=1:imc 

     for k=1:clr 

      img2(row,col,k)=bitxor(pic(row,col,k),66); 
      pic1=dec2bin(img2(row,col,k),8); 
      for n=1:8 
      pic2(n)=xor(pic1(n),scr(n)); 
      if n==1 
       scr(i)=pic2(n); 
      end 
      if n==2 
       scr(i-1)=scr(i); 
       scr(i)=pic2(n); 
       end 
       if n==3 
       scr(i-2)=scr(i-1); 
       scr(i-1)=scr(i); 
       scr(i)=pic2(n); 
       end 
       if n==4 

       scr(i-3)=scr(i-2); 
       scr(i-2)=scr(i-1); 
       scr(i-1)=scr(i); 
       scr(i)=pic2(n); 
       end 
       if n==5 
       scr(i-4)=scr(i-3); 
       scr(i-3)=scr(i-2); 
       scr(i-2)=scr(i-1); 
       scr(i-1)=scr(i); 
       scr(i)=pic2(n); 
       end 
       if n==6 
       scr(i-5)=scr(i-4); 
       scr(i-4)=scr(i-3); 
       scr(i-3)=scr(i-2); 
       scr(i-2)=scr(i-1); 
       scr(i-1)=scr(i); 
       scr(i)=pic2(n); 
       end 
       if n==7 
       scr(i-6)=scr(i-5);  
       scr(i-5)=scr(i-4); 
       scr(i-4)=scr(i-3); 
       scr(i-3)=scr(i-2); 
       scr(i-2)=scr(i-1); 
       scr(i-1)=scr(i); 
       scr(i)=pic2(n); 
       end 
       if n==8 
       scr(i-7)=scr(i-6);   
       scr(i-6)=scr(i-5); 
       scr(i-5)=scr(i-4); 
       scr(i-4)=scr(i-3); 
       scr(i-3)=scr(i-2); 
       scr(i-2)=scr(i-1); 
       scr(i-1)=scr(i); 
       scr(i)=pic2(n); 
       end 

      end 
      pic3=int2str(pic2); 
      img2(row,col,k)=bin2dec(pic3); 


     end 

    end 
end 


imwrite(img2,'peppers2.png'); 
imshow('peppers2.png'); 

답변

2

어쩌면 내가 여기서 뭔가를 실종 해요,하지만 당신은 왜 사용하지 않는 내장 BITSHIFT? 또한 BITXOR이 uint8에서 작동하므로

pic=imread('peppers.png'); 
pic2 = bitxor(pic,uint8(66)); %# xor with 66 
pic2 = bitshift(pic2,1); %# shift to the left by one 
으로 함수를 바꿀 수 있습니다.
관련 문제