2016-04-19 17 views
0

私は宿題に取り組んでおり、グレースケール画像のデータを含む.binファイルが与えられました。ここでの目的は、これをグレイスケールからバイナリイメージに変換するCコードを書くことです。まず、グレースケール画像をMATLABで開きます。.binを画像係数に変換し、MATLABとCを使用してバイナリ画像を作成する

A = fread(file, 256*256, 'uint8=>uint8'); 
A = reshape(A, 256, 256).'; 
imshow(A); 

大きいです。私は4つの配列に分割し、Cヘッダファイルに詰め込んだイメージ係数を持っています。このクラスで使用しているマイクロコントローラ(MSP430)は、それらを一度に処理できないため、このようにしなければなりませんでした。私は、最初のヘッダファイルをインポートし、私の変数を設定し、ここではすべての力仕事が行われているところである。

for (i = 0; i == 16384; i++){ 
    if (suzi[i] >= 95){ //95 is given threshhold 
     temp = 0b0000000; 
    } 
    else{ 
     temp = 0b00000001 << shiftby; //will right shift by 7, then 6, then 5 until 0 and then wrap back to 7 
    } 

    current = previous | temp; //updates the 8 bit data with the latest bit 
    if(shiftby > 0){ 
     shiftby--; //decrements shifts until 0 
    } 
    else{ 
     shiftby = 7; //wraps back to 7 
     suziarr[arrayindex] &= 0b00000000; //makes sure this value is 8 0s 
     suziarr[arrayindex] |= current; //sets bits to match current 8 bit value 
     current = 0b00000000; 
     arrayindex++; //this is why the array will be 1/8 the size 
    } 

    previous = current; //update state 

} 

一時、スージー、suziarr、以前、現在の変数は、unsigned char型として宣言されています。 suziもconstであり、私がヘッダファイルに詰め込んだ配列の1つです。 suziは長さ13684に設定され、suziarrは長さ2048に設定されます。何らかの理由で、私が使用する4つのデータセットのどれにも関係なく、同じ数字が得られます。私は何が欠けていますか?

答えて

0

ループ

for (i = 0; i == 16384; i++) 

は反復しません。それはする必要があります

for (i = 0; i < 16384; i++) 
+0

私はそれを逃したと信じられない!ありがとう!さて、係数がありますが、以前と同じコマンドを使用してMATLABにインポートすると、uint8型のサイズ31891x1の列ベクトルが得られます。私は同じタイプの列ベクトルを探していますが、サイズを65536x1とすると、これを256x256イメージに再形成する必要があります。何かご意見は? –

+0

freadの代わりにfscanfを試し、double型の8192x1の列ベクトルを得ました。これを1と0に伸ばして8192x8のベクトルを得る方法を見つけ出すことができたら、私は金色になります。 –

+0

これは別の質問ですか?あなたはそれを見せていません。 –

関連する問題