《数字图像处理原理与实践(MATLAB版)》一书之代码Part5

本文系《数字图像处理原理与实践(MATLAB版)》一书之代码系列的Part5。辑录该书第225至第280页之代码(此处应部分读者之需求调整了代码公布的顺序——具体说明请见以下的文章链接),供有须要读者下载研究使用。代码运行结果请參见原书配图,建议下载代码前阅读下文:

关于《数字图像处理原理与实践(MATLAB版)》一书代码公布的说明

http://blog.csdn.net/baimafujinji/article/details/40987807

P245

I = imread('lena.png');
fcoef=fft2(double(I));            %FFT变换
tmp1 =log(1+abs(fcoef));
spectrum = fftshift(fcoef);        %调整中心
tmp2 = log(1+abs(spectrum));
ifcoef = ifft2(fcoef);            %逆变换

figure                            %显示处理结果
subplot(2,2,1), imshow(I), title('source image');
subplot(2,2,2), imshow(tmp1,[]), title('FFT image');
subplot(2,2,3), imshow(tmp2,[]), title('shift FFT image');
subplot(2,2,4), imshow(ifcoef,[]), title('IFFT image');

P251

J= double(imread('lena.bmp'));
K = dct2(J);
figure, imshow(K,[0 255])

P252-1

J= double(imread('lena.bmp'));
K = dct2(J);
figure, imshow(K,[0 255]);
K_i = idct2(K);
figure, imshow(K_i,[0 255])

P252-2

J= double(imread('lena.bmp'));
A = J(1:8,1:8);
D = dctmtx(8);
dct_1 = D*A;
dct_2 = D'*dct_1;

P252-3

J= double(imread('lena.bmp'));
A = J(1:8,1:8);
D = dctmtx(8);
dct_1 = D*A*D';
dct_2 = dct2(A);

P253

I = imread('cameraman.tif');
I = im2double(I);
T = dctmtx(8);
dct = @(block_struct) T * block_struct.data * T';
B = blockproc(I,[8 8],dct);
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 = blockproc(B,[8 8],@(block_struct) mask .* block_struct.data);
invdct = @(block_struct) T' * block_struct.data * T;
I2 = blockproc(B2,[8 8],invdct);
imshow(I), figure, imshow(I2)

P262

a = [0 0 1 1 0 0 1 1];
b = fwht(a);

P263

I = imread('baboon.bmp');
I1 = double(I);
T = hadamard(8);
myFun1 = @(block_struct)T*block_struct.data*T/64;
H = blockproc(I1, [8 8], myFun1);
H(abs(H)<3.5)=0;
myFun2 = @(block_struct)T*block_struct.data*T;
I2 = blockproc(H, [8 8], myFun2);
subplot(121), imshow(I1,[]), title('original image');
subplot(122), imshow(I2,[]), title('zipped image');

P264

I = imread('baboon.bmp');
I1 = double(I);
[m n] =size(I);
sizi = 8;
num = 16;
%分块进行离散沃尔什变换
T = hadamard(sizi);
myFun1 = @(block_struct)T*block_struct.data*T/(sizi.^2);
hdcoe = blockproc(I1, [sizi, sizi], myFun1);
%又一次排列系数
coe = im2col(hdcoe,  [sizi, sizi], 'distinct');
coe_t = abs(coe);
[Y, ind] = sort(coe_t);
%舍去绝对值较小的系数
[m_c, n_c] = size(coe);
for i = 1:n_c
coe(ind(1:num, i), i)=0;
end
%重建图像
re_hdcoe = col2im(coe, [sizi, sizi], [m, n], 'distinct');
myFun2 = @(block_struct)T*block_struct.data*T;
re_s = blockproc(re_hdcoe, [sizi, sizi], myFun2);
subplot(121), imshow(I1,[]), title('original image');
subplot(122), imshow(re_s,[]), title('compressed image');

P268

dim1 = [1 1 1 2 2 2 3 3 3];
dim2 = [1 2 3 1 2 3 1 2 3];
dim3 = [63 75 78 50 56 65 70 71 80];

sum( (dim1-mean(dim1)) .* (dim2-mean(dim2)) ) / ( 9-1 ) % 0
sum( (dim1-mean(dim1)) .* (dim3-mean(dim3)) ) / ( 9-1 ) % 0.625
sum( (dim2-mean(dim2)) .* (dim3-mean(dim3)) ) / (9-1 ) % 5

std(dim1)^2  %  0.75
std(dim2)^2  %  0.75
std(dim3)^2  %  100.7778

P274

X = [2 2; 2 3; 3 4; 4 3; 5 4; 5 5];
[COEFF,SCORE,latent,tsquare] = princomp(X);

P275-1

X0=X-repmat(mean(X),6,1);
SCORE_1 = X0*COEFF;

P275-2

X = [2 2; 2 3; 3 4; 4 3; 5 4; 5 5];
V = cov(X);
[COEFF,latent] = pcacov(V)

P277

I = imread('baboon.bmp');
x = double(I)/255;
[m,n]=size(x);
y =[];
%拆解图像
for i = 1:m/8;
    for j = 1:n/8;
        ii = (i-1)*8+1;
        jj = (j-1)*8+1;
        y_app = reshape(x(ii:ii+7,jj:jj+7),1,64);
        y=[y;y_app];
    end
end

%KL变换
[COEFF,SCORE,latent] = princomp(y);
kl = y * COEFF;

kl1 = kl;
kl2 = kl;
kl3 = kl;

%置零压缩过程
kl1(:, 33:64)=0;
kl2(:, 17:64)=0;
kl3(:, 9:64)=0;

%KL逆变换
kl_i = kl*COEFF';
kl1_i = kl1*COEFF';
kl2_i = kl2*COEFF';
kl3_i = kl3*COEFF';

image = ones(256,256);
image1 = ones(256,256);
image2 = ones(256,256);
image3 = ones(256,256);

k=1;
%重组图像
for i = 1:m/8;
    for j = 1:n/8;

y = reshape(kl_i(k, 1:64),8,8);
        y1 = reshape(kl1_i(k, 1:64),8,8);
        y2 = reshape(kl2_i(k, 1:64),8,8);
        y3 = reshape(kl3_i(k, 1:64),8,8);

ii = (i-1)*8+1;
        jj = (j-1)*8+1;

image(ii:ii+7,jj:jj+7) = y;
        image1(ii:ii+7,jj:jj+7) = y1;
        image2(ii:ii+7,jj:jj+7) = y2;
        image3(ii:ii+7,jj:jj+7) = y3;

k=k+1;
    end
end

(代码公布未完,请待兴许...)

《数字图像处理原理与实践(MATLAB版)》一书之代码Part5的更多相关文章

  1. 《数字图像处理原理与实践(MATLAB版)》一书之代码Part6

    本文系<数字图像处理原理与实践(MATLAB版)>一书之代码系列的Part6,辑录该书第281至第374页之代码,供有须要读者下载研究使用.代码运行结果请參见原书配图,建议下载代码前阅读下 ...

  2. 《数字图像处理原理与实践(MATLAB版)》一书之代码Part2

    本文系<数字图像处理原理与实践(MATLAB版)>一书之代码系列的Part2(P43~80),代码运行结果请參见原书配图,建议下载代码前阅读下文: 关于<数字图像处理原理与实践(MA ...

  3. 《数字图像处理原理与实践(MATLAB版)》一书之代码Part1

    本文系<数字图像处理原理与实践(MATLAB版)>一书之代码系列的Part1(P1~42).代码运行结果请參见原书配图. P20 I = imread('lena.jpg');BW1 = ...

  4. 数字图像处理原理与实践(MATLAB版)勘误表

    本文系<数字图像处理原理与实践(MATLAB版)>一书的勘误表. [内容简单介绍]本书全面系统地介绍了数字图像处理技术的理论与方法,内容涉及几何变换.灰度变换.图像增强.图像切割.图像去噪 ...

  5. 《数字图像处理原理与实践(MATLAB文本)》书代码Part7

    这篇文章是<数字图像处理原理与实践(MATLAB文本)>一本书的代码系列Part7(由于调整先前宣布订单,请读者注意分页程序,而不仅仅是基于标题数的一系列文章),第一本书特色186经225 ...

  6. Reading | 《数字图像处理原理与实践(MATLAB版)》(未完待续)

    目录 一.前言 1.MATLAB or C++ 2.图像文件 文件头 调色板 像素数据 3.RGB颜色空间 原理 坐标表示 4.MATLAB中的图像文件 图像类型 image()函数 imshow() ...

  7. FPGA经典:Verilog传奇与基于FPGA的数字图像处理原理及应用

    一 简述 最近恶补基础知识,借了<<Verilog传奇>>,<基于FPGA的嵌入式图像处理系统设计>和<<基千FPGA的数字图像处理原理及应用>& ...

  8. MATLAB数字图像处理(一)基础操作和傅立叶变换

    数字图像处理是一门集计算机科学.光学.数学.物理学等多学科的综合科学.随着计算机科学的发展,数字图像处理技术取得了巨大的进展,呈现出强大的生命力,已经在多种领域取得了大量的应用,推动了社会的发展.其中 ...

  9. Win8MetroC#数字图像处理--2.2图像二值化函数

    原文:Win8MetroC#数字图像处理--2.2图像二值化函数 [函数代码] /// <summary> /// Binary process. /// </summary> ...

随机推荐

  1. ORM数据库框架 SQLite ORMLite MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  2. 项目总结——MVC+MongoDB实现文件上传

    在做项目的时候我们遇到了视频上传的问题.正式开始项目之前做了一个简单的Demo实现在MVC中视频文件的上 传,考虑到将视频放到MongoDB中上传和读取速度慢的问题,这次我们实现的文件上传是存储的路径 ...

  3. Python3爬虫:利用Fidder抓取手机APP的数据

    1.什么是Fiddler? Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(指cookie,ht ...

  4. 基于PU-Learning的恶意URL检测

    https://xz.aliyun.com/t/2190 Ya-Lin Zhang, Longfei Li, Jun Zhou, Xiaolong Li, Yujiang Liu, Yuanchao ...

  5. PostgreSQL入门教程

    一.安装 首先,安装PostgreSQL客户端. sudo apt-get install postgresql-client 然后,安装PostgreSQL服务器. sudo apt-get ins ...

  6. HTTP认证与https简介

    HTTP请求报头: Authorization HTTP响应报头: WWW-Authenticate  HTTP认证是基于质询/回应(challenge/response)的认证模式. HTTP认证 ...

  7. [Functional Programming] Introduction to State, thinking in State

    Recently, I am learning Working with ADT. Got some extra thought about State Monad. Basiclly how to ...

  8. mysql游标的使用 No data - zero rows fetched, selected

    转自:http://blog.sina.com.cn/s/blog_544c72960101bvl3.html 这是一个游标的使用例子. 但是其中有几点需要注意,就是为什么要加入 declare CO ...

  9. 如果使用xutils出现了ExceptionInInitializerError这个错误

    看看是否初始化 1)在Application初始化   x.Ext.init(this); // 在application的onCreate中初始化 /** * 初始化xUtils3 */ publi ...

  10. C语言常见问题 如何用Visual Studio编写C语言程序测试

    新建Win32控制台应用程序   勾选控制台空项目   右击源文件,添加cpp文件   输入范例代码,可以正常运行#include <stdio.h> int main(void) { i ...