2016-07-29 2 views
0

D : \ Dr.Ayush Singhal \ Ph.D 코딩 및 database \ compression * .jpg 폴더에있는 500 개의 이미지를 압축하고 다른 폴더에 압축 된 이미지를 저장하려고합니다. D : \ Dr.Ayush Singhal \ Ph.D 코딩 및 데이터베이스 \ 압축 \ CompressQuality80 \ image (k) .jpg 경로가 있습니다.이미지 압축을위한 matlab 코딩 이미지 작성

나는 MATLAB에서 하나의 코딩을 작성했습니다.

압축 프로그램이 압축 된 데이터를 저장하는 동안 지정된 경로에서 동시에 모든 이미지를 작업하지만 코드는 지정된 폴더의 모든 이미지를 모두 저장할 수 없습니다. 코딩 당신의 문제가 당신의 말에, 그래서 같은 이름 image(k)을 가진 모든 파일을 저장하는 것입니다

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 값은 이미지 이름을 단순화합니다. 매번 이미지가 이미지 (k)로 이름이 바뀌고 마지막으로 imwrite 이미지 만 표시됩니다. 그들의 이미지가 같은 폴더에 여러 개의 이미지를 저장하는 것입니다. –

답변

0

입니다 만, 마지막 반복이 모든 이미지를 저장하기 위해 것이다 루프의 경우 각 반복마다 다른 이름을 지정해야합니다.이를 달성하는 데는 여러 가지 방법이 있습니다. 하나의 간단한 해결책은 다음과 같습니다이 루프의 모든 반복에 대해 등을 하나의 파일 image(1), image(2), image(3)을 만듭니다

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

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

.

+0

답변을 주셔서 대단히 감사합니다. 이것이 내가 필요한 것입니다. –

+0

기꺼이 도와 드리겠습니다. 질문을 답변으로 설정하여 닫을 수 있도록하십시오. –