[A,map,transparency] = imread(___)
A = imread(filename)
从 filename
指定的文件读取图像,并从文件内容推断出其格式。如果 filename
为多图像文件,则 imread
读取该文件中的第一个图像。
A = imread(filename,fmt)
另外还指定具有 fmt
指示的标准文件扩展名的文件的格式。如果 imread
找不到具有 filename
指定的名称的文件,则会查找名为 filename.fmt
的文件。
A = imread(___,idx)
从多图像文件读取指定的图像。此语法仅适用于 GIF、PGM、PBM、PPM、CUR、ICO、TIF、SVS 和 HDF4 文件。您必须指定 filename 输入,也可以指定 fmt。
A = imread(___,Name,Value)
使用一个或多个名称-值对组参数以及先前语法中的任何输入参数来指定格式特定的选项。
[A,map] = imread(___)
将 filename
中的索引图像读入 A
,并将其关联的颜色图读入 map
。图像文件中的颜色图值会自动重新调整到范围 [0,1]
中。
[A,map,transparency] = imread(___)
另外还返回图像透明度。此语法仅适用于 PNG、CUR 和 ICO 文件。对于 PNG 文件,如果存在 alpha 通道,transparency
会返回该 alpha 通道。对于 CUR 和 ICO 文件,它为 AND(不透明度)掩码。
[U,S,V] = svd(A)
执行矩阵 A
的奇异值分解,因此 A = U*S*V'
。
[U,S,V] = svd(A,'econ')
为 m
×n
矩阵 A
生成精简分解:
m > n
- 只计算 U
的前 n
列,S
是一个 n
×n
矩阵。
m = n
- svd(A,'econ')
等效于 svd(A)
。
m < n
- 只计算 V
的前 m
列,S
是一个 m
×m
矩阵。
精简分解从奇异值的对角矩阵 S
中删除额外的零值行或列,以及 U
或 V
中与表达式 A = U*S*V'
中的那些零值相乘的列。删除这些零值和列可以缩短执行时间,并减少存储要求,而且不会影响分解的准确性。
[U,S,V] = svd(A,0)
为 m
×n
矩阵 A
生成另一种精简分解:
m > n
- svd(A,0)
等效于 svd(A,'econ')
。
m <= n
- svd(A,0)
等效于 svd(A)
。
imshow(I)
在图窗中显示灰度图像 I
。imshow
使用图像数据类型的默认显示范围,并优化图窗、坐标区和图像对象属性以便显示图像。
imshow(I,[low high])
显示灰度图像 I
,以二元素向量 [low high]
形式指定显示范围。有关详细信息,请参阅 DisplayRange 参数。
imshow(I,[])
显示灰度图像 I
,根据 I
中的像素值范围缩放灰度显示。imshow
使用 [min(I(:)) max(I(:))]
作为显示范围。imshow
将 I
中的最小值显示为黑色,将最大值显示为白色。有关详细信息,请参阅 DisplayRange 参数。
imshow(RGB)
在图窗中显示真彩色图像 RGB
。
imshow(BW)
在图窗中显示二值图像 BW
。对于二值图像,imshow
将值为 0
(零)的像素显示为黑色,将值为 1
的像素显示为白色。
imshow(X,map)
显示具有颜色图 map
的索引图像 X
。颜色图矩阵可以具有任意行数,但它必须恰好包含 3 列。每行被解释为一种颜色,其中第一个元素指定红色的强度,第二个元素指定绿色的强度,第三个元素指定蓝色的强度。颜色强度可以在 [0, 1] 区间中指定。
imshow(filename)
显示存储在由 filename
指定的图形文件中的图像。
imshow(___,Name,Value)
使用名称-值对组控制运算的各个方面来显示图像。
himage = imshow(___)
返回 imshow
创建的图像对象。
imshow(I,RI)
显示图像 I
以及相关联的二维空间参照对象 RI
。
imshow(X,RX,map)
显示索引图像 X
以及相关联的二维空间参照对象 RX
和颜色图 map
。
clc
clear all
close all
% logo = imread('XMU_logo.png');
logo = imread('birds.jpg');
logo = double(logo(:,:,2));
% ibad = find(logo(:) < 150);
% logo(ibad) = 1;
% imshow(logo);
imshow(mat2gray(logo))%矩阵转换为灰度图像
[nx,ny] = size(logo);
rk = rank(logo);
[U,S,V] = svd(logo);%奇异值分解
k = 50;
% re = U*S*V';
re = U(:,1:k)*S(1:k,1:k)*V(:,1:k)';
figure(2)
imshow(mat2gray(re));
clc;
close all;
clear;
[data,txt]=xlsread('scores');
[nx,ny]=size(data);
ave=mean(data);
demean=data-repmat(ave,[nx,1]); % 中心化 每一列data减去均值 repmat 把ave复制称为nx行一列的向量
R=corrcoef(data);
[V,Lambda]=eig(R);%提取特征值和特征向量
[lambda,ilambda]=sort(diag(Lambda),'descend');%排列 diag可认为是提取对角元素
Lambda=diag(lambda);%按lambda生成对角矩阵
%二、v=diag(X,k)
%X为矩阵,v为向量
%取矩阵X的第K条对角线元素为向量v
% %aa =
% -1.3282 -1.7925 0.4092
% -0.3803 0.5858 -0.4684
% -0.9560 0.7356 0.8292
% >> diag(aa)
% ans =
% -1.3282
% 0.5858
% 0.8292
V=V(:,ilambda); %把V按照pca后从大到小贡献的排列
PoV=diag(Lambda)/trace(Lambda);%trace 求对角线值的和
[PoV,cumsum(PoV)]% cumsum 累积和 (类似可以画成累积曲线的那张图的数据处理)
pc1=V(:,1);
pc2=V(:,2);
pc3=V(:,3);
pc1=-pc1;
figure(1);
% yline(0,'r-');
hold on;
h1=plot(pc1,'ro-','linewidth',1.5,'markersize',3);
hold on
h2=plot(pc2,'k*-','linewidth',1.5,'markersize',3);
hold on
h3=plot(pc3,'b^:','linewidth',1.5,'markersize',3);
hold off;
legend([h1,h2,h3],{'pc1','pc2','pc3'});
set(gca,'xtick',[1:13],'xticklabel',{'Chinese','Math','English','Physi.','Chem','Bio.','Politics','History','Geography','Music','Physical','Arts','Tech'});
header=txt(1,:);
kind=txt(2:end,end);
grid on;
clc;
clear;
close all;
%logo=imread('XMU_logo.png');
logo=imread('birds.jpg');
logo=double(logo(:,:,2));
imshow(logo);
imshow(mat2gray(logo));
[nx,ny]=size(logo);
rk=rank(logo);
[U,S,V]=svd(logo);%奇异值分解
k=768;
re=U(:,1:k)*S(1:k,1:k)*V(:,1:k)';
re_2=U*S*V';
figure(2);
%imshow(mat2gray(re));
imshow(mat2gray(re_2));
figure(3)
imshow(mat2gray(re));
% A=[4,8,2;2,7,3;0,6,4];
% rank(A)=2 一定小于等于A的行或列数的最小值
[data,txt] = xlsread('scores');
[nx,ny] = size(data);
ave = mean(data);
demean = data - repmat(ave,[nx,1]);
% raw data using corrcoef ;
R = corrcoef(data);
[V, Lambda] = eigsort(R);
keyboard
PoV = diag(Lambda)/trace(Lambda);
[PoV, cumsum(PoV)]
pc1 = V(:,1);
pc2 = V(:,2);
pc3 = V(:,3);
figure(1)
yline(0,'r-')
hold on
h1 = plot(pc1,'ro-','linewidth',1.5,'MarkerSize',3);
hold on
h2 = plot(pc2,'k*-.','linewidth',1.5,'MarkerSize',3);
hold on
h3 = plot(pc3,'b^:','linewidth',1.5,'MarkerSize',3);
hold off
legend([h1,h2,h3],{'pc1','pc2','pc3'})
xticks([1:13])
header = txt(1,:);
kind = txt(2:end,end);
xticklabels({'Chinese','Math','English','Physi.','Chem.','Bio.',...
'Politics','History','Geography','Music','Physical','Arts','Tech'})
figure(2)
scores = demean*V;
score1 = scores(:,1);
score2 = scores(:,2);
score3 = scores(:,3);
labels = kind;
scatter3(score1,score2,score3,'ro')
text(score1,score2,score3,labels)
xlabel('PC1')
ylabel('PC2')
zlabel('PC3')
title('PCA based on data*V')
% to demonstrate the without normalization, the seperation is worse.
figure(3)
R = cov(data);
[V, Lambda] = eigsort(R);
PoV = diag(Lambda)/trace(Lambda);
[PoV, cumsum(PoV)]
scores = data*V;
score1 = scores(:,1);
score2 = scores(:,2);
score3 = scores(:,3);
labels = kind;
scatter3(score1,score2,score3,'ro')
text(score1,score2,score3,labels)
xlabel('PC1')
ylabel('PC2')
zlabel('PC3')
title('PCA based on cov(data)')
function x=d0(v)
x=spdigas(v(:),0,length(v(:)),length(v(:)));
end