📄 demo_pcacomp.html
字号:
<html><head> <meta HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=ISO-8859-1"> <title>demo_pcacomp.m</title><link rel="stylesheet" type="text/css" href="../../m-syntax.css"></head><body><code><span class=h1>% DEMO_PCACOMP Demo on image compression using PCA</span><br><span class=help>%</span><br><span class=help>% <span class=help_field>Description:</span></span><br><span class=help>% The PCA model is trained to model rectangular non-overlapping </span><br><span class=help>% patches of a specified input image. The compression phase </span><br><span class=help>% involves representation of the image patches in the lower </span><br><span class=help>% dimesional space trained by the PCA. The decompression consists </span><br><span class=help>% of reconstruction of the image patches from their low dimensional </span><br><span class=help>% representation.</span><br><span class=help>%</span><br><span class=help>% Note: This demo requires Images toolbox.</span><br><span class=help>%</span><br><span class=help>% See also </span><br><span class=help>% PCA, LINPROJ, PCAREC.</span><br><span class=help>%</span><br><hr><span class=help1>% <span class=help1_field>About:</span> Statistical Pattern Recognition Toolbox</span><br><span class=help1>% (C) 1999-2003, Written by Vojtech Franc and Vaclav Hlavac</span><br><span class=help1>% <a href="http://www.cvut.cz">Czech Technical University Prague</a></span><br><span class=help1>% <a href="http://www.feld.cvut.cz">Faculty of Electrical Engineering</a></span><br><span class=help1>% <a href="http://cmp.felk.cvut.cz">Center for Machine Perception</a></span><br><br><span class=help1>% <span class=help1_field>Modifications:</span></span><br><span class=help1>% 06-jun-2004, VF</span><br><br><hr>help demo_pcacomp;<br><br><span class=comment>% Setting</span><br><span class=comment>%==========================================</span><br>img_file = <span class=quotes>'lena.jpg'</span>;<br>patch_size = 16;<br><br><span class=io>fprintf</span>(<span class=quotes>'Input dimension: %d\n'</span>, patch_size^2);<br>new_dim=<span class=io>input</span>(<span class=quotes>'Output dimesion:'</span>);<br><span class=keyword>if</span> isempty(new_dim), new_dim = 20; <span class=keyword>end</span><br><br><span class=comment>% load image</span><br><span class=io>fprintf</span>(<span class=quotes>'Image: %s\n'</span>, img_file);<br>img = im2double( imread( img_file ));<br><span class=keyword>if</span> isrgb(img), img = rgb2grey(img); <span class=keyword>end</span><br><span class=io>fprintf</span>(<span class=quotes>'Image size: [%d x %d]\n'</span>, size(img));<br><br><span class=comment>% image -> patches stored as column vectors</span><br>X = im2col( img, patch_size*[1 1], <span class=quotes>'distinct'</span>);<br><br><span class=comment>% train PCA</span><br><span class=io>fprintf</span>(<span class=quotes>'Training PCA...'</span>);<br>pca_model = pca(X,new_dim );<br><span class=io>fprintf</span>(<span class=quotes>'done\n'</span>);<br><br><span class=comment>% reconstruction</span><br><span class=io>fprintf</span>(<span class=quotes>'Reconstructing image patches...'</span>);<br>Y = pcarec( X, pca_model );<br><span class=io>fprintf</span>(<span class=quotes>'done\n'</span>);<br><br><span class=comment>% plot reconstruction error w.r.t. to dimension</span><br><span class=graph>figure</span>; hold on; <br>title(<span class=quotes>'Reconstruction error'</span>); <br>xlabel(<span class=quotes>'output dimesion'</span>); ylabel(<span class=quotes>'MsErr'</span>);<br><span class=graph>plot</span>(pca_model.MsErr);<br><span class=graph>plot</span>(pca_model.new_dim, pca_model.mse, <span class=quotes>'or'</span>);<br><br><span class=comment>% patches -> image</span><br>compressed_img = col2im(Y,patch_size*[1 1],size(img),<span class=quotes>'distinct'</span>);<br><br><span class=comment>% display original and compresed image</span><br><span class=graph>figure</span>; imshow(img);<br>hold on; title(<span class=quotes>'Original image'</span>);<br><br><span class=comment>% display original and compresed image</span><br><span class=graph>figure</span>; imshow(img);<br>hold on; title(<span class=quotes>'Splitting to patches'</span>);<br>[h,w]=size(img);<br><span class=keyword>for</span> x=1:16:w, <span class=graph>plot</span>([x x],[1 h],<span class=quotes>'b'</span>); <span class=keyword>end</span><br><span class=keyword>for</span> y=1:16:w, <span class=graph>plot</span>([1 w],[y y],<span class=quotes>'b'</span>); <span class=keyword>end</span><br><br><span class=graph>figure</span>; imshow(compressed_img);<br>hold on; title(<span class=quotes>'Compressed image'</span>);<br><br><span class=comment>% display statistics</span><br>[dim,num_data]=size(X);<br>new_dim=pca_model.new_dim;<br>cr = ((new_dim*num_data)+(new_dim*dim))/(dim*num_data);<br><br><span class=io>fprintf</span>(<span class=quotes>'new_dim=%d\n'</span>,new_dim);<br><span class=io>fprintf</span>(<span class=quotes>'Compression ratio (compressed_size/original_size)= %f%%\n'</span>,cr*100);<br><span class=io>fprintf</span>(<span class=quotes>'MsErr=%f\n'</span>, pca_model.mse);<br><br><span class=comment>%EOF</span><br></code>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -