Scilab に特定の JPEG 画像を受信させ、それを 0 ~ 255 (通常の 8 ビット深度画像) の値の行列に変換し、それらの値をより小さな深度に再配置しようとしています。提案は、1 ビットから 7 ビットまでのすべてのオプションを作成することです。これは、それぞれ 2、4、8、16、32、64、および 128 の異なるレベルの色に変換されます。
単純に 3 つのチャネルのいずれかを取得し、それを行と列のマトリックスとして操作できるため、作業を簡単にするためにグレースケール イメージを使用しています。これを行うにはもっと良い方法がたくさんあることは知っていますが、大学の画像処理コースであるため、Scilab を使用して行う必要があります (正確には電気工学の信号と線形システムの対象です)。
私が思いついたのは、私が試したテストマトリックスでうまくいったことです:
function y=bits(x,p)
[rows, columns]=size(x);
y=zeros(rows,columns);
aux=round(linspace(0,255,2^p)); //define which values the output can have
for i=1:rows //varies rows
for j=1:columns //varies columns
[aux2,minpos]=min(abs(aux-x(i,j)));//calculates the closest value between the input and the possible output values
y(i,j)=aux(minpos); //get the calculated closest value and puts it at the output
end
end
endfunction
私が理解できないのは、手作りのマトリックスでうまく機能する理由ですが、より大きなもの (つまり、行と列の数) を送信しようとすると、「サブマトリックスが正しく定義されていません」というメッセージが表示されることです。「y(i,j)=aux(minpos);」である8行目のエラー ライン。
編集:追加するために、SIVPの機能である「imread」を使用して画像をインポートしています。
どんな助けでも大歓迎です、事前に感謝=)