MATLAB彩色图片的处理

芮学
2023-12-01

语法

A = imread(filename)

A = imread(filename,fmt)

A = imread(___,idx)

A = imread(___,Name,Value)

[A,map] = imread(___)

[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(不透明度)掩码。

语法

s = svd(A)

[U,S,V] = svd(A)

[U,S,V] = svd(A,'econ')

[U,S,V] = svd(A,0)

说明

示例

s = svd(A) 以降序顺序返回矩阵 A 的奇异值

示例

[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)

imshow(I,[low high])

imshow(I,[])

imshow(RGB)

imshow(BW)

imshow(X,map)

imshow(filename)

imshow(___,Name,Value)

himage = imshow(___)

imshow(I,RI)

imshow(X,RX,map)

说明

示例

imshow(I) 在图窗中显示灰度图像 Iimshow 使用图像数据类型的默认显示范围,并优化图窗、坐标区和图像对象属性以便显示图像。

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

 类似资料: