
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
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)