目录
网站
智能图像色彩缩减和量化
https://yarpiz.com/
使用智能聚类方法:(a)k均值算法,(b)模糊c均值聚类(FCM)和(c)自组织神经网络,使用 RGB 和 HSV 颜色编码来执行聚类任务。
file = uigetfile
打开一个模态对话框,其中列出了当前文件夹中的文件。用户可以在这里选择或输入文件的名称。如果文件存在并且有效,当用户点击打开时,uigetfile
将返回文件名。如果用户点击取消或窗口关闭按钮 (X),uigetfile
将返回0
。当用户点击打开时,
[file,path] = uigetfile
将返回文件的名称和路径。如果用户点击取消或窗口关闭按钮 (X),uigetfile
将为两个输出参数都返回0
。
[file,path,indx] = uigetfile
将返回在对话框中选择的筛选器的索引。
___ = uigetfile(filter)
指定文件扩展名,根据该扩展名筛选对话框中显示的文件。可以将此语法与上述语法中的任何输出参数结合使用。
pause(n) 暂停执行 n 秒,然后继续执行。必须启用暂停,此调用才能生效。
pause(state) 启用、禁用或显示当前暂停设置。
oldState = pause(state) 返回当前暂停设置并如 state 所示设置暂停状态。例如,如果已启用暂停功能,oldState = pause('off') 会在 oldState 中返回 'on' 并禁用暂停。
提取rgb
img=imread(FullFileName); img=im2double(img); R=img(:,:,1); G=img(:,:,2); B=img(:,:,3); X=[R(:) G(:) B(:)]; Z=X;
strcmpi - 比较字符串(不区分大小写)
此 MATLAB 函数 将比较 s1 和 s2,并忽略字母大小写差异。如果二者相同,函数将返回 1(true),否则返回 0 (false)。如果文本的大小和内容相同,则它们将视为相等,不考虑大小
写。返回结果 tf 的数据类型为 logical。
kmeans
idx = kmeans(X,k)
执行 k 均值聚类,以将 n×p 数据矩阵X
的观测值划分为k
个聚类,并返回包含每个观测值的簇索引的 n×1 向量 (idx
)。X
的行对应于点,列对应于变量。默认情况下,
kmeans
使用欧几里德距离平方度量,并用 k-means++ 算法进行簇中心初始化。
idx = kmeans(X,k,Name,Value)
进一步按一个或多个Name,Value
对组参数所指定的附加选项返回簇索引。例如,指定余弦距离、使用新初始值重复聚类的次数或使用并行计算的次数。prod
B = prod(A)
返回A
的数组元素的乘积。
如果
A
是向量,则prod(A)
返回元素的乘积。如果
A
为非空矩阵,则prod(A)
将A
的各列视为向量,并返回一个包含每列乘积的行向量。如果
A
为 0×0 空矩阵,prod(A)
返回1
。如果
A
为多维数组,则prod(A)
沿第一个非单一维度运算并返回乘积数组。此维度的大小将减少至1
,而所有其他维度的大小保持不变。如果输入
A
为single
类型,则prod
会计算并将B
以single
类型返回。如果为任何其他数值和逻辑数据类型,prod
会计算并将B
以double
类型返回。
B = prod(A,
计算'all'
)A
的所有元素的乘积。
clc;
clear;
close all;
%% Select Image
Filter={'*.jpg;*.jpeg;*.png'};
[FileName, FilePath]=uigetfile(Filter);
pause(0.01);
if FileName==0
return;
end
FullFileName=[FilePath FileName];
%% Load Image Data
Choices = {'RGB', 'HSV'};
ANSWER = questdlg('Select the color coding:', ...
'Color Coding', ...
Choices{1}, Choices{2}, ...
Choices{1});
pause(0.01);
img=imread(FullFileName);
img=im2double(img);
R=img(:,:,1);
G=img(:,:,2);
B=img(:,:,3);
X=[R(:) G(:) B(:)];
Z=X;
UseHSV = strcmpi(ANSWER, 'HSV');
if UseHSV
Y=rgb2hsv(X);
W=[3 1 2];
for l=1:numel(W)
Y(:,l)=Y(:,l)*W(l);
end
Z=Y;
end
%% Number of Desired Colors
ANSWER = inputdlg('Number of desired colors:','Color Reduction',1,{'25'});
pause(0.01);
nColor = str2double(ANSWER{1});
%% Select Algorithm
Choices = {'k-Means Clusterin', 'Fuzzy Clustering (FCM)', 'SOM Network'};
ANSWER = questdlg('Select the clustering algorithm:', ...
'Color Coding', ...
Choices{1}, Choices{2}, Choices{3}, ...
Choices{1});
pause(0.01);
UseKMeans = strcmpi(ANSWER, Choices{1});
UseFCM = strcmpi(ANSWER, Choices{2});
UseSOM = strcmpi(ANSWER, Choices{3});
%% Perform Clustering
if UseKMeans
Method = 'k-Means Clustering';
Options.MaxIter=1000;
[IDX, C]=kmeans(Z,nColor,'options',Options);
end
if UseFCM
Method = 'Fuzzy Clustering (FCM)';
[C, U]=fcm(Z,nColor);
[MaxU, IDX]=max(U);
end
if UseSOM
Method = 'SOM Neural Network';
NetSize=[floor(sqrt(nColor)) ceil(sqrt(nColor))];
nColor = prod(NetSize);
[IDX, C]=SOM(Z,NetSize);
end
%% Create Reduced Image
Z2=C(IDX,:);
if UseHSV
Y2 = Z2;
for l=1:numel(W)
Y2(:,l)=Y2(:,l)/W(l);
end
X2=hsv2rgb(Y2);
else
X2=Z2;
end
R2=reshape(X2(:,1),size(R));
G2=reshape(X2(:,2),size(G));
B2=reshape(X2(:,3),size(B));
img2=zeros(size(img));
img2(:,:,1)=R2;
img2(:,:,2)=G2;
img2(:,:,3)=B2;
%% Show Results
figure;
subplot(1,2,1);
imshow(img);
title('Original Image');
subplot(1,2,2);
imshow(img2);
title(['Color Reduced Image (k = ' num2str(nColor) ') using ' Method]);