如何用MATLAB进行图像压缩

如何用MATLAB进行图像压缩,第1张

I=imread('cameraman.tif')%输入图像

I=im2double(I)%数据类型转换

T=dctmtx(8)%计算二维离散DCT矩阵

dct=@(x)T*x*T'%设置函数句柄

B=blkproc(I,[88],dct)%图像块处理

mask=[11110000%掩膜

11100000

11000000

10000000

00000000

00000000

00000000

00000000]

B2=blkproc(B,[88],@(x)mask.*x)%图像块处理

invdct=@(x)T'*x*T%设置函数句柄

I2=blkproc(B2,[88],invdct)%图像块处理

imshow(I),figure,imshow(I2)%显示原始图像和压缩重构图像

I=imread('1.jpg')

f=rgb2gray(I)

f1=im2bw(f,192/240)

bw1=double(f1)

 bw=edge(bw1,'sobel',0.4)

r_max=90

r_min=20step_r=10step_angle=pi/6p=0.3

% p:阈值,0,1之间的数

% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% output

% hough_space:参数空间,h(a,b,r)表示圆心在(a,b)半径为r的圆上的点数

% hough_circl:二值图像,检测到的圆

% para:检测到的圆的圆心、半径

[m,n] = size(bw)

size_r = round((r_max-r_min)/step_r)+1

size_angle = round(2*pi/step_angle)

I=imread('cameraman.tif')

I=im2double(I) %转换图像矩阵为双精度型。

T=dctmtx(8) %产生二维DCT变换矩阵

%计算二维DCT,矩阵T及其转置是DCT函数P1*X*P2的参数

B=blkproc(I,[8,8],'P1*x*P2',T,T') %二值掩模,用来压缩DCT系数,只留下DCT系数中左上角的10个

mask=[1 1 1 1 0 0 0 0

1 1 1 0 0 0 0 0

1 1 0 0 0 0 0 0

1 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 ]

B2=blkproc(B,[8 8],'P1.*x',mask) %只保留DCT变换的10个系数

I2=blkproc(B2,[8 8],'P1*x*P2',T',T) %重构图像

subplot(1,2,1)

imshow(I)

title('原始图像')

subplot(1,2,2)

imshow(I2)

title('压缩图像')

我这个程序也是改了后的,不过我运行过了,图片压缩效果都能出来,就是压缩比没有变小,我也不知道为什么,如果有人给决绝了麻烦通知一下,我邮箱sunnyxiaoxu@126.com


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11184236.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-14
下一篇2023-05-14

发表评论

登录后才能评论

评论列表(0条)

    保存