2016-07-29 24 views
0

D:\ Dr.Ayush Singhal \ Ph.Dコーディングとdatabase \ compression * .jpgというフォルダにある500画像を圧縮し、圧縮された画像を別のフォルダに保存したいパスD:\ Dr.Ayush Singhal \ Ph.Dコーディングとデータベース\圧縮\ CompressQuality80 \ image(k).jpgを持つ。画像圧縮用のMATLABで画像を書き込む

私はMATLABで1つのコーディングを記述しました。

指定されたパスからすべての画像を同時に圧縮していますが、圧縮されたデータを保存している間に指定されたフォルダにすべての画像を保存することはできません。 コーディングは

clc                   
clear all;                 
close all; 

**% IMAGE RETRIVING** 

dirlist=dir('D:\Dr.Ayush Singhal\Ph.D coding and database\compression\*.jpg'); 

NF=length(dirlist) 

%f=zeros(NF,1); 

for k=1:NF 

    fname = dirlist(k).name; 

    [path,name,ext] = fileparts(fname); 

    im=strcat(path,name,ext); 

**% IMAGE COMPRESSION** 

    im=imread(im); 

im=rgb2gray(im); 

im=imresize(im,5); 

im=imcrop(im,[0 0 480 640]); 

whos im 

[row,col]=size(im); 

row=double(fix(row/8))*8; 

col=double(fix(col/8))*8; 

width=col; 

height=row; 

im=imcrop(im,[0 0 width height]); 

a22=im; 

%a22=im(:,:,3); 

var4=a22; 

a22=double(a22)-128;  %%%%Remember that DCT works only data range of 

-128 to %+127%%%%%%%% 

[email protected]; 

a222=blkproc(a22,[8 8],fun);  %%%%Shows the DCT2 of pixel value%%%%%% 

QU=quntnew13(width,height);   %%%%%%Quantization table to be used%%%%%% 

a2=a222./QU;    %Value After dividing with Quantization table %% 

r=1; 

while(r<=height) 

    c=1; 

    while(c<=width) 

     a4=a2(r,c); 

     if(a4<0) 

      x32(r,c)=-1; 

      x3(r,c)=abs(a4); 

     else 

      if(a4>0) 

       x4(r,c)=a4; 
       x42(r,c)=1; 

      end 
     end 

    c=c+1; 

    end 
    r=r+1; 
end 

x3;   %%%%%%%%%Negative pixel values%%%% 

x4;   %%%%%%%%%positive pixel values%%%% 

x32=x32+x42; %%%%%%%%%Selecting only negative value as -1%%%%% 

x=x3+x4;  %%DCT values only posive value(Negative also in posive form)%%% 

x11=mod(x,1); %%Removing Fractional part%%%%% 

x111=x-x11; %Taking only integer values%%% 

X2=x111; 

x111=X2; 

x333=x111+x11; 

x33=x333.*x32;\ 

a21=x33.*QU; 

[email protected]; 

x34=blkproc(a21,[8 8],fun1); 

X6=x34+128; 

X6=uint8(X6); 

im1=X6; 

*****% COMPRESSED IMAGE WRITING***** 

imwrite(im1,'D:\Dr.Ayush Singhal\Ph.D coding and database\compression\CompressQuality80\image(k).jpg','quality',80); 

end 
+0

ファイル 'image(k).jpg'を何度も書き直していますが、これは正しいですか?またはあなたが望むものは 'image(1).jpg'、' image(2).jpg'、 'image(3).jpg'などのファイルをいくつか作成することですか? –

+0

はいイメージごとに違う名前にしたいです。イメージ(k)のkの値はイメージ名を単純化しています。イメージがimage(k)という名前に変更されるたびに、最後のimwriteイメージだけが取得されます。彼らは同じフォルダ内の複数の画像を保存する構文です。 –

答えて

0

あなたの問題は、forループの最後で、あなただけ、すべての画像を保存するために、あなたの最後の反復を持つことになりますので、あなたは、同じ名前image(k)を持つすべてのファイルを保存しているということですそれぞれの反復で異なる名前を割り当てる必要があります。これを達成するにはいくつかの方法があります。一つの簡単な解決策は次のようになります。

file_name=sprintf('D:\Dr.Ayush Singhal\Ph.D coding and database\compression\CompressQuality80\image(%d).jpg',k); 

imwrite(im1,file_name,'quality',80); 

これは、ファイルimage(1)image(2)image(3)などのために、ループ内のすべての反復のための1つを作成します。

+0

お返事ありがとうございます。これが私の必要なものです。 –

+0

私は助けてくれると嬉しいです。あなたの質問を回答として設定してください。 –