【问题标题】:image writing in the matlab coding for image compressionmatlab中的图像写入编码用于图像压缩
【发布时间】:2016-07-31 17:01:33
【问题描述】:

我想压缩文件夹 D:\Dr.Ayush Singhal\Ph.D coding and database\compression*.jpg 中的 500 张图像,并将压缩后的图像保存在路径为 D:\Dr.Ayush Singhal 的其他文件夹中\Ph.D 编码和数据库\compression\CompressQuality80\image(k).jpg。

我在 MATLAB 中编写了一种编码。

压缩程序正在同时处理来自指定路径的所有图像,但 保存压缩数据时,代码无法保存指定文件夹中的所有图像。 编码是

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%%%%%%%%

fun=@dct2;

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;

fun1=@idct2;

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

【问题讨论】:

  • 你一遍又一遍地重写文件image(k).jpg,对吗?或者你想要创建几个文件image(1).jpgimage(2).jpgimage(3).jpg等等?
  • 是的,我想为不同的图像使用不同的名称。实际上,image(k) 中 k 的值是简化图像名称。每次将图像重命名为 image(k) 时,我只得到最后一个 imwrite 图像。他们的语法是将多个图像保存在同一个文件夹中吗?

标签: image matlab image-compression


【解决方案1】:

您的问题是您正在保存每个具有相同名称 image(k) 的文件,因此在 for 循环结束时您将只有最后一次迭代,为了保存每个图像,您必须分配不同的在每次迭代中命名,有几种方法可以实现这一点。一个简单的解决方案是:

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) 等。for 循环中的每次迭代都会创建一个文件。

【讨论】:

  • 非常感谢您的回答。这正是我所需要的。
  • 很高兴我能帮上忙,请将您的问题设置为已回答,以便关闭
猜你喜欢
  • 1970-01-01
  • 2014-08-09
  • 1970-01-01
  • 1970-01-01
  • 2012-11-16
  • 2014-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多