2011-04-05 18 views
0

我想通過dec2bin()函數將RGB圖像的每一位轉換爲二進制(像素顏色方式)後對其進行XOR運算。首先,我聲明數組scr(8)=0,包含所有零,現在我想那是什麼時候ar(1)=xor(scr(1),pic(1))完成後,應貯存在scr(8)=ar(1)scr(7)=scr(8)scr(8)=ar(1)依此類推,直到最後, 我寫的代碼,但它需要很多的時間來處理。 如果您知道加速代碼的方法,請幫助我。我卡在這裏,並有最終的演示。實現左移,同時對RGB圖像的每種顏色進行異或運算的快速算法

這是我的代碼:

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