【模式识别】k-means聚类的手势识别【Matlab 303期】

一、简介

提取手部轮廓特征,k-means聚类算法,训练得到手势识别模型,然后用测试数据测试。
在这里插入图片描述
1 K-means算法原理
K-means算法是最常用的一种聚类算法。算法的输入为一个样本集(或者称为点集),通过该算法可以将样本进行聚类,具有相似特征的样本聚为一类。

针对每个点,计算这个点距离所有中心点最近的那个中心点,然后将这个点归为这个中心点代表的簇。一次迭代结束之后,针对每个簇类,重新计算中心点,然后针对每个点,重新寻找距离自己最近的中心点。如此循环,直到前后两次迭代的簇类没有变化。

下面通过一个简单的例子,说明K-means算法的过程。如下图所示,目标是将样本点聚类成3个类别。
2 基本的步骤为:

step1:选定要聚类的类别数目k(如上例的k=3类),选择k个中心点。

step2:针对每个样本点,找到距离其最近的中心点(寻找组织),距离同一中心点最近的点为一个类,这样完成了一次聚类。

step3:判断聚类前后的样本点的类别情况是否相同,如果相同,则算法终止,否则进入step4。

step4:针对每个类别中的样本点,计算这些样本点的中心点,当做该类的新的中心点,继续step2。

3 上述步骤的关键两点是:

  1. 找到距离自己最近的中心点。
  2. 更新中心点。

二、源代码

%------------------hand shape analysis
%
close all
format long     %显示小数点后4位的数据
%读入hand的landmark数值

fid=fopen('shapes.txt');
hand=fscanf(fid, '%g %g',[40,inf]); %  X(1,1)X(2,1)...X(56,1);X(1,2)X(2,2)...X(56,2)
% choose 40 shapes as a row column
Shape=600*hand;

%-----------------------------------------------------
%   shape 矩阵每行112列,对应一个手的数据,
%56列对应X坐标 后56列对应Y坐标 
%   Odata中所有形状的质点已经平移到原点
temp=Shape;
[temp,X,Y]=show2D(temp);             
% %--------Show unaligned shape  
% plot(X,Y,'r*');
% title('unaligned hands');
%------------------Compute the shape metric--------------------------- 

%-------------------------计算each Shape Size-------------------------
T=temp*temp';                             % Diag的对角元素为∑(x^2+y^2)
V=diag(T);                                % compute 对角线
size=sqrt(V);                             % Size 为40×1矩阵

%------------------------将Size归一化--------------------------------
%%%         根据形状大小的函数满足S(ax)=aS(x),每个坐标都除以对应Size的值
for i=1:40
  preHand(i,:)=temp(i,:)/size(i);               % preHand 为已经对准质点和大小
end


% -------------------------将各个形状以hand1为mean旋转------------------------ 
x1=preHand(1,:);      % vector 1*40

x1=reshape(x1,56,2);
x2=preHand(2,:);

for i=2:40
    x3=preHand(i,:);
    x2=reshape(x3,56,2);
    XD=x1'*x2; 
    [U,S,V]=svd(XD);
    I=x2*V*U';
    preHand(i,:)=reshape(I,1,112);
end

aligned=preHand;
for i=1:40
for j=1:56
     XX(i,j)=aligned(i,j);            % the mean x-axis coordinate of every landmark  
     YY(i,j)=aligned(i,j+56);         % the mean y-axis coordinate of every landmark
end   
end
plot(XX,YY,'ro')
%-----------------compute the mean shape coordinates
%   every column of colm is the mean cooridnate of all the 40 hands'
%   coordinate respectively
colm=mean(aligned);              % mean(X) 求每一列元素的均值
for i=1:56
     XX(i)=colm(i);            % the mean x-axis coordinate of every landmark  
     YY(i)=colm(i+56);         % the mean y-axis coordinate of every landmark
end  

% subplot(1,2,1);
% figure;
% plot(XX,YY,'g-',XX,YY,'rx');               % show the mean shape of 40 hands
% title('the Mean Shape of Aligned');
% title('b1=0');
%---------------------------------------------------------------
%   tangent space projection
absx=colm*colm';absx=absx*absx;
for i=1:40
    xo=dot(colm,aligned(i,:));          % 矩阵点乘
    xt(i,:)=absx*aligned(i,:)/xo;
end    

%---------------------------------------------------------------
%    PCA 
[signals,PC,V] = pca1(xt');

% eAB=xt*xt';       % 应该减去均值球协方差矩阵
% eAb=xt*xt'/39;
% % eBA=xt'*xt;
% [PC,V]=eig(eAB);
% [PC1,V1]=eig(eAb);
% V=diag(V);
% V1=diag(V1);
% sumV=40*mean(V);
%   compute the eigenvector of eBA
% PC1=xt'*PC;
% figure(2)
% bar(V);
% title('Shape eigenvalue');
% xlabel('Eigenvalue');
% ylabel('variance expansion factor(percent)');
%   now the shape model can be x=xmean+PC1*B, 
%   where b {
     -3*sqrt(λ)3*sqrt(λ)}
% Pb=PC(:,1)*3*sqrt(V1(1));
Pb1=signals(:,1)*3*sqrt(V(1));
% 
% Xz=colm+Pb1';
% Xz=colm-Pb1';
Pb2=signals(:,2)*3*sqrt(V(2));
 Xz=colm-Pb2';
% Xz=colm-Pb2';

% for i=1:56
%      Xp(i)=Xz(i);            % the mean x-axis coordinate of every landmark  
%      Yp(i)=Xz(i+56);         % the mean y-axis coordinate of every landmark
% end   

function edgedemo(action, varargin)
%EDGEDEMO Edge detection demo.
%   This demo uses the EDGE function to apply different edge detection
%   methods to a variety of images.  Use the pop-up menus to select an
%   image and an edge detection method.  You can control the parameters
%   for the different methods by setting the values in the middle frame
%   at the bottom of the figure.  (The set of parameters differs
%   depending on the method you choose.)  Press the "Apply" button to
%   calculate the edge map using the specified method and parameters.
%
%   For the Sobel, Prewitt, and Roberts methods, the EDGE function
%   finds edges by thresholding the gradient.  For the Laplacian of
%   Gaussian method, EDGE thresholds the slope of the zero crossings
%   after filtering the image with a LoG filter.  For the Canny method,
%   EDGE thresholds the gradient using the derivative of a Gaussian
%   filter.
%
%   By default, the EDGE function automatically computes the threshold
%   to use.  To specify a different threshold manually (in order to
%   detect more or fewer edges), click the radio button next to the
%   edit box in the middle frame and enter the value in the text field.
%   If you are using the Canny method, two thresholds are used:  the
%   high threshold is the value you specify, and the low threshold is
%   0.4 times the high threshold.
%
%   For the Sobel and Prewitt methods, you can choose to detect
%   horizontal edges, vertical edges, or both.
%
%   For the Laplacian of Gaussian and Canny methods, you can specify
%   sigma, the parameter that controls the spread of the Gaussian
%   function.  The size of the filter is set automatically by EDGE,
%   based on the value of sigma.
%
%   The Saturn and Lifting Body images are courtesy of NASA.
%  
%   See also EDGE.

%   Copyright 1993-2004 The MathWorks, Inc.  
%   $Revision: 1.19.4.7 $  $Date: 2004/04/01 16:12:06 $

% Function subroutines:
% 
% InitializeEDGEDEMO -      Initialization of controls, axes, and
%                           Images.
%
% ComputeEdgeMap -          Computes the Edge map of the original 
%                           image using edge.m
%
% SelectMethod -            Selects Edge Detection method and enable/disable
%                           the appropriate controls
%
% LoadNewImage -            Loads the selected Image
%
% UpdateThreshCtrl -     Grabs the threshold from the Edit box and 
%                           enables the Apply button
% 
% UpdateDirectionality -    Sets the directionality string based on the 
%                           popup menu.
%
% Radio -                   Sets values for Radio Buttons and enables/disables
%                           the threshold edit box.
%
% UpdateLOGSize -           Grabs the LOG filter size from edit box
%
% UpdateLOGSigma -          Grabs LOG filter Sigma from edit box
% 
% ActivateSPRControls -     Turns on controls for Sobel, Prewitt, Roberts
%
% ActivateLOGControls -     Turns on controls for LOG.

if nargin<1,
   action='InitializeEDGEDEMO';
end;

feval(action,varargin{
     :});
return;


%%%
%%%  Sub-function - InitializeEDGEDEMO
%%%

function InitializeEDGEDEMO()

% If dctdemo is already running, bring it to the foreground.
h = findobj(allchild(0), 'tag', 'Edge Detection Demo');
if ~isempty(h)
   figure(h(1))
   return
end

screenD = get(0, 'ScreenDepth');
if screenD>8
   grayres=256;
else
   grayres=128;
end


EdgeDemoFig = figure( ...
   'Name','Edge Detection Demo', ...
   'NumberTitle','off', 'HandleVisibility', 'on', ...
   'tag', 'Edge Detection Demo', ...
   'Visible','off', 'Resize', 'off',...
   'BusyAction','Queue','Interruptible','off', ...
   'Color', [.8 .8 .8], ...
   'IntegerHandle', 'off', ...
   'DoubleBuffer', 'on', ...
   'Colormap', gray(grayres));

figpos = get(EdgeDemoFig, 'position');

% Adjust the size of the figure window
figpos(3:4) = [560 420];
horizDecorations = 10;  % resize controls, etc.
vertDecorations = 45;   % title bar, etc.
screenSize = get(0,'ScreenSize');
if (screenSize(3) <= 1)
    % No display connected (apparently)
    screenSize(3:4) = [100000 100000]; % don't use Inf because of vms
end
if (((figpos(3) + horizDecorations) > screenSize(3)) | ...
            ((figpos(4) + vertDecorations) > screenSize(4)))
    % Screen size is too small for this demo!
    delete(EdgeDemoFig);
    error(['Screen resolution is too low ', ...
          '(or text fonts are too big) to run this demo']);
end
dx = screenSize(3) - figpos(1) - figpos(3) - horizDecorations;
dy = screenSize(4) - figpos(2) - figpos(4) - vertDecorations;
if (dx < 0)
    figpos(1) = max(5,figpos(1) + dx);
end
if (dy < 0)
    figpos(2) = max(5,figpos(2) + dy);
end
set(EdgeDemoFig, 'position', figpos);

rows = figpos(4); cols = figpos(3);
hs = (cols-512) / 3;        % Horizantal Spacing
bot = rows-2*hs-256;        % Bottom of the images

%====================================
% Parameters for all buttons and menus
ifs = hs/2;   % Intraframe Spacing

Std.Interruptible = 'off';
Std.BusyAction = 'queue';    

%================================
% Original Image Axes
hdl.ImageAxes = axes(Std, ...
   'Units', 'Pixels', ...
   'Parent',EdgeDemoFig,...
   'ydir', 'reverse', ...
   'XLim', [.5 256.5], ...
   'YLim', [.5 256.5],...
   'CLim', [0 255], ...
   'Position',[hs bot 256 256], ...
   'XTick',[],'YTick',[]);
set(get(hdl.ImageAxes, 'title'), 'string', 'Original Image');

%================================
% Edge Map Axes
hdl.EdgeAxes = axes(Std, ...
   'Units', 'Pixels', ...
   'Parent',EdgeDemoFig,...
   'ydir', 'reverse', ...
   'XLim', [.5 256.5], ...
   'YLim', [.5 256.5],...
   'CLim', [0 1], ...
   'Position',[cols-hs-256 bot 256 256], ...
   'XTick',[],'YTick',[]);
set(get(hdl.EdgeAxes, 'title'), 'string', 'Edge Map');

%================================
% Original Image 
hdl.Image = image(Std, ...
   'CData', [], ...
   'CDataMapping', 'scaled', ...
   'Parent',hdl.ImageAxes,...
   'Xdata', [1 256],...
   'Ydata', [1 256],...
   'EraseMode', 'none');

%================================
% Edge Map Image
hdl.Edge = image(Std, ...
   'CData', [], ...
   'CDataMapping', 'scaled', ...
   'Parent',hdl.EdgeAxes,...
   'Xdata', [1 256],...
   'Ydata', [1 256],...
   'EraseMode', 'none');

% Background color for frames
bgcolor = [0.45 0.45 0.45];
fgcolor = [1 1 1];  % For text

%================================
% The Menu frame - image and method popups go here
mfleft=hs; 
mfbot=hs; 
mfwid=(3*cols/8)-1.5*hs; % 2*cols/7
mfht=bot-2*hs;
hdl.MenuFrame = uicontrol(Std, ...
   'Parent', EdgeDemoFig, ...
   'Style', 'frame', ...
   'Units', 'pixels', ...
   'Position', [mfleft mfbot mfwid mfht], ...
   'BackgroundColor', bgcolor);

%====================================
% The LoadNewImage menu : ip-> Image Popup
ipwid = mfwid-2*ifs;
ipht = 21;       % (mfht-5*ifs)/3;
ipleft = mfleft+ifs;
ipbot = mfbot+1.7*ifs + 2*ipht;
hdl.ImgPop=uicontrol(Std, ...
   'Parent', EdgeDemoFig, ...
   'Style','popupmenu', ...
   'Units','pixels', ...
   'Position',[ipleft ipbot ipwid ipht], ...
   'Enable','on', ...
   'String','Coins|Circuit|Vertigo|Lifting Body|Rice|Saturn|Eight Bit|Glass', ...
   'Tag','ImagesPop',...
   'Callback','edgedemo(''LoadNewImage'')');

% Text label for Image Menu Popup
uicontrol( Std, ...
   'Parent', EdgeDemoFig, ...
   'Style','text', ...
   'Units','pixels', ...
   'Position',[ipleft ipbot+ipht ipwid 18], ...
   'Horiz','left', ...
   'Background',bgcolor, ...
   'Foreground',fgcolor, ...
   'String','Select an Image:');


%====================================
% The Method menu : mp-> Method Popup
hdl.Method = 'Sobel';
mpwid = ipwid;
mpht = ipht;
mpleft = ipleft;
mpbot = mfbot+1.2*ifs;
hdl.MethodPop=uicontrol(Std, ...
   'Parent', EdgeDemoFig, ...
   'Style','popupmenu', ...
   'Units','pixels', ...
   'Position',[mpleft mpbot mpwid mpht], ...
   'Enable','on', ...
   'String','Sobel|Prewitt|Roberts|Laplacian of Gaussian|Canny', ...
   'Tag','MethodPop',...
   'Callback','edgedemo(''SelectMethod'')');

% Text label for Method Popup
uicontrol( Std, ...
   'Parent', EdgeDemoFig, ...
   'Style','text', ...
   'Units','pixels', ...
   'Position',[mpleft mpbot+mpht mpwid 18], ...
   'Horiz','left', ...
   'Background',bgcolor, ...
   'Foreground',fgcolor, ...
   'String','Edge Detection Method:');


%================================
% The Parameter frame - method specific parameters go here
pfleft =(3*cols/8)+0.5*hs; % 2*cols/7
pfbot = 1.5*hs; 
pfwid =(3*cols/8)-hs; % 3*cols/7
pfht = bot-2.5*hs;
hdl.ParamFrame = uicontrol(Std, ...
   'Parent', EdgeDemoFig, ...
   'Style', 'frame', ...
   'Units', 'pixels', ...
   'Position', [ pfleft pfbot pfwid pfht ], ...
   'BackgroundColor', bgcolor);

%====================================
% Controls for Sobel/Prewitt/Roberts edge detectors:

% Text label for Threshold Controls
labelleft = pfleft+ifs;
labelwid = pfwid/2-hs;
labelbot = pfbot+2*pfht/3;
hdl.sprThLbl = uicontrol(Std,...
   'Parent', EdgeDemoFig, ...
   'Style','text', ...
   'Units','pixels', ...
   'Position',[labelleft labelbot labelwid 18], ...
   'Horiz','left', ...
   'String','Threshold:', ...
   'BackgroundColor',bgcolor, ...
   'ForegroundColor',fgcolor);
hdl.Threshold = 0;             % Initial value

raleft = pfleft + pfwid/2 - hs/2;
rabot = pfbot+2*pfht/3+hs/6;
rawid = pfwid/2;
raht = ipht;
hdl.RadioAutomatic=uicontrol(Std, ...
   'Parent', EdgeDemoFig, ...
   'Style','radiobutton', ...
   'Units','pixels', ...
   'Position',[raleft rabot rawid raht], ...
   'String','Automatic', ...
   'value',1,'Userdata',1, ...
   'Callback','edgedemo(''Radio'',''auto'')');

rmleft = pfleft + pfwid/2 - hs/2;
rmbot = pfbot+pfht/3+hs/3;
rmwid = hs*1.5;
rmht = ipht;
hdl.RadioManual=uicontrol(Std, ...
   'Parent', EdgeDemoFig, ...
   'Style','radiobutton', ...
   'Units','pixels', ...
   'Position',[rmleft rmbot rmwid rmht], ...
   'String','', ...
   'value',0,'Userdata',0, ...
   'Callback','edgedemo(''Radio'',''manual'')');

thleft = rmleft+rmwid;
thwid = rawid-rmwid;
thbot = rmbot;
thht = rmht;
hdl.ThreshCtrl = uicontrol(Std, ...
   'Parent', EdgeDemoFig, ...
   'Enable', 'off', ...
   'Style','edit', ...
   'Units','pixels', ...
   'Position',[thleft thbot thwid thht], ...
   'Horiz','right', ...
   'Background','white', ...
   'Foreground','black', ...
   'String','0',...
   'callback','edgedemo(''UpdateSprThresh'')');



% The Directionality Popup menu : dp-> Direction Popup
dpwid = pfwid/2;
dpht = ipht;
dpleft = pfleft + pfwid/2 - hs/2;
dpbot = pfbot+.4*hs;
hdl.sprDirPop=uicontrol(Std, ...
   'Parent', EdgeDemoFig, ...
   'Style','popupmenu', ...
   'Units','pixels', ...
   'Position',[dpleft dpbot dpwid dpht], ...
   'Enable','on', ...
   'String','Both|Horizontal|Vertical', ...
   'Tag','DirectionPop',...
   'Callback','edgedemo(''UpdateDirectionality'')');
% Text label for Directionality Popup
labelleft = pfleft+ifs;
labelwid = pfwid/2-hs;     %5*hs/4
labelbot = dpbot;
hdl.sprDirLbl = uicontrol( Std, ...
   'Parent', EdgeDemoFig, ...
   'Style','text', ...
   'Units','pixels', ...
   'Position',[labelleft labelbot labelwid 18], ...
   'Horiz','left', ...
   'Background',bgcolor, ...
   'Foreground',fgcolor, ...
   'String','Direction:');
hdl.Directionality = 'both';


hdl.logSigmaCtrl=uicontrol(Std, ...
   'Parent', EdgeDemoFig, ...
   'Style','edit', ...
   'Units','pixels', ...
   'Position',[dpleft dpbot dpwid dpht], ...
   'Horiz','right', ...
   'Background','white', ...
   'Foreground','black', ...
   'String','2', ...
   'Tag','DirectionPop',...
   'Visible', 'off', ...
   'Callback','edgedemo(''UpdateLOGSigma'')');
% Text label for Sigma edit box
hdl.logSigmaLbl = uicontrol( Std, ...
   'Parent', EdgeDemoFig, ...
   'Style','text', ...
   'Units','pixels', ...
   'Position',[labelleft labelbot labelwid 18], ...
   'Horiz','left', ...
   'Background',bgcolor, ...
   'Foreground',fgcolor, ...
   'Visible', 'off', ...
   'String','Sigma:');
hdl.LogSigma = 2;

%====================================
% Status bar
colr = get(EdgeDemoFig,'Color');
hdl.Status = uicontrol( Std, ...
   'Parent', EdgeDemoFig, ...
   'Style','text', ...
   'Units','pixels', ...
   'Background', colr, ...
   'Foreground', [.8 0 0], ...
   'Position',[pfleft 2 pfwid 18], ...
   'Horiz','center', ...
   'Tag', 'Status', ...
   'String','Initializing Edge Detection Demo...');

%================================
% The Button frame - Apply, Info, and Close buttons go here
bfleft = (3*cols/4)+.5*hs; % 5*cols/7
bfbot = hs; 
bfwid = (cols/4)-1.5*hs; % 2*cols/7
bfht = bot-2*hs;
hdl.ButtonFrame = uicontrol(Std, ...
   'Parent', EdgeDemoFig, ...
   'Style', 'frame', ...
   'Units', 'pixels', ...
   'Position', [ bfleft bfbot bfwid bfht ], ...
   'BackgroundColor', bgcolor);


%====================================
% The APPLY button
btnwid = bfwid - 2*ifs;
btnht =  (bfht-4*ifs)/3;     % 21
btnleft = bfleft + ifs;
btnbot = bfbot + bfht - ifs - btnht;
hdl.Apply=uicontrol(Std, ...
   'Parent', EdgeDemoFig, ...
   'Style','pushbutton', ...
   'Units','pixels', ...
   'Position',[btnleft btnbot btnwid btnht], ...
   'Enable','off', ...
   'String','Apply', ...
   'Callback','edgedemo(''ComputeEdgeMap'')');

%====================================
% The INFO button
btnbot = bfbot + bfht - 2*ifs - 2*btnht;
hdl.Help=uicontrol(Std, ...
   'Parent', EdgeDemoFig, ...
   'Style','pushbutton', ...
   'Units','pixels', ...
   'Position',[btnleft btnbot btnwid btnht], ...
   'Enable','off', ...
   'String','Info', ...
   'Callback','helpwin edgedemo');

%====================================
% The CLOSE button
btnbot = bfbot + ifs;
hdl.Close=uicontrol(Std, ...
   'Parent', EdgeDemoFig, ...
   'Style','pushbutton', ...
   'Units','pixels', ...
   'Position',[btnleft btnbot btnwid btnht], ...
   'Enable','off', ...
   'String','Close', ...
   'Callback','close(gcbf)');


set(EdgeDemoFig, 'Userdata', hdl, 'Visible', 'on');
drawnow
LoadNewImage(EdgeDemoFig);
drawnow
set(EdgeDemoFig, 'HandleVisibility', 'Callback');
set([hdl.Apply hdl.Help hdl.Close] , 'Enable', 'on');
return


%%%
%%%  Sub-Function - ComputeEdgeMap
%%%

function ComputeEdgeMap(DemoFig)

if nargin<1
   callb = 1;    % We're in a callback
   DemoFig = gcbf;
else 
   callb = 0;    % We're in the initialization
end

三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、备注

完整代码或者代写添加QQ912100926
往期回顾>>>>>>
【图像压缩】图像处理教程系列之图像压缩【Matlab 074期】
【图像分割】图像处理教程系列之图像分割(一)【Matlab 075期】
【图像分割】图像处理教程系列之图像分割(二)【Matlab 076期】
【模式识别】银行卡号之识别【Matlab 077期】
【模式识别】指纹识别【Matlab 078期】
【图像处理】基于GUI界面之DWT+DCT+PBFO改进图像水印隐藏提取【Matlab 079期】
【图像融合】CBF算法之图像融合【Matlab 080期】
【图像去噪】自适应形态学之图像去噪【Matlab 081期】
【图像增强】DEHAZENET和HWD之水下去散射图像增强【Matlab 082期】
【图像增强】PSO寻优ACE之图像增强【Matlab 083期】
【图像重建】ASTRA算法之图像重建【Matlab 084期】
【图像分割】四叉树之图像分割【Matlab 085期】
【图像分割】心脏中心线之提取【Matlab 086期】
【图像识别】SVM植物叶子之疾病检测和分类【Matlab 087期】
【图像识别】基于GUI界面之模板匹配手写数字识别系统【Matlab 088期】
【图像识别】基于GUI界面之不变矩的数字验证码识别【Matlab 089期】
【图像识别】条形码识别系统【Matlab 090期】
【图像识别】基于GUI界面RGB和BP神经网络之人民币识别系统【Matlab 091期】
【图像识别】CNN卷积神经网络之验证码识别【Matlab 092期】
【图像分类】极限学习分类器之对遥感图像分类【Matlab 093期】
【图像变换】DIBR-3D之图像变换【Matalb 094期】
【图像分割】模糊聚类算法之FCM图像分割【Matlab 095期】
【模式识别】银行监控系统之人脸识别【Matlab 096期】
【模式识别】基于GUI界面之疲劳检测系统【Matlab 097期】
【图像识别】国外车牌识别【Matlab 098期】
【图像分割】最大类间方差法(otsu)之图像分割【Matlab 099期】
【图像分割】直觉模糊C均值聚类之图像分割IFCM【Matlab 100期】
【图像分割】基于matlab形态学重建和过滤改进FCM算法(FRFCM)之图像分割【Matlab 101期】
【图像增强】局部对比度增强CLAHE算法之直方图增强【Matlab 102期】
【图像融合】Frequency Partition之图像融合【Matlab 103期】
【图像评价】SVM之图像无参考质量评价【Matlab 104期】
【图像边缘检测】最小二乘法用于椭圆边缘检测【Matlab 105期】
【图像加密】基于GUI界面之混沌系统图像加密解密【Matlab 106期】
【图像配准】SIFT算法之图像配准【Matlab 107期】
【图像分割】随机游走算法用于图像分割【Matlab 108期】
【图像分割】形态学重建和过滤改进FCM算法(FRFCM)用于图像分割【Matlab 109期】
【图像分割】图像分割IFCM之直觉模糊C均值聚类【Matlab 110期】
【图像增强】区域相似变换函数与蜻蜓算法之灰度图像增强【Matlab 111期】
【图像直线拟合】最小二乘法之图像直线拟合【Matlab 112期】
【图像去雾】暗通道之图像去雾【Matlab 113期】
【图像识别】基于matlab GUI界面之路面裂缝识别【Matlab 114期】
【图像识别】身份证号码之识别【Matlab 115期】
【图像聚类】FCM和改进之FCM脑部CT图像聚类【Matlab 116期】
【图像评价】CCF算法之图像质量评价【Matlab 117期】
【图像分割】蚁群优化模糊聚类之图像分割【Matlab 118期】
【模式识别】基于GUI界面之水果检测系统【Matlab 119期】
【模式识别】基于GUI界面之水果分类系统【Matlab 120期】
【模式识别】基于GUI界面之水果分级系统【Matlab 121期】
【模式识别】人脸识别之检测脸、眼、鼻子和嘴【Matlab 122期】
【图像处理】基于 GUI界面之图像加解密【Matlab 124期】
【模式识别】基于GUI界面BP网络之手写体大写字母识别【Matlab 125期】
【图像分割】基于GUI界面之医学影像分割【Matlab 126期】
【图频处理】基于GUI界面之环图像处理与音乐播放系统【Matlab 127期】
【图像隐藏】基于Laguerre 变换之图像隐藏【Matlab 128期】
【图像处理】基于dwt函数之实现二维小波变换【Matlab 129期】
【图像处理】分形插值算法之调换图片【Matlab 130期】
【图像边缘检测】基于GUI界面之图像边缘检测系统【Matlab 131期】
【图像分割】基于GUI界面之彩色图像分割【Matlab 132期】
【图像去噪】基于GUI界面之图像滤波去噪【Matlab 133期】
【图像几何运算】基于GUI界面之图像几何运算系统【Matlab 134期】
【图像处理】基于GUI界面之图像处理系统【Matlab 135期】
【图像识别】基于matlab之细胞识别和边缘检测【Matlab 136期】
【模式识别】反馈神经Hopfield的数字识别【Matlab 172期】
【模式识别】指纹图像细节特征提取 【Matlab 173期】
【图像分割】RGB HSV YCbCr Lab颜色空间人脸检测之图像分割【Matlab 174期】
【图像压缩】小波变换之图像压缩【Matlab 175期】
【模式识别】基于GUI界面的火灾检测【Matlab 230期】
【模式识别】基于Hough变换的答题卡识别【Matlab 231期】
【模式识别】二值膨胀差分和椒盐滤波之教室内人数识别系统【Matlab 232期】
【小波变换】基于GUI界面DWT与SVD算法的数字水印 【Matlab 233期】
【模式识别】基于GUI界面的指针式表盘识别【Matlab 234期】
【模式识别】基于Hough变换图片车道线检测 【Matlab 235期】
【图像分割】粒子群优化T熵图像分割【Matlab 236期】
【图像分割】粒子群优化指数熵图像分割【Matlab 237期】
【图像分割】粒子群优化指数熵图像分割【Matlab 238期】
【模式识别】基于GUI贝叶斯最小错误率手写数字识别【Matlab 239期】
【模式识别】PCA手写数字识别【Matlab 240期】
【模式识别】特征匹配的英文印刷字符识别【Matlab 241期】
【模式识别】知识库的手写体数字识别【Matlab 242期】
【模式识别】银行卡数字识别【Matlab 243期】
【边缘检测】插值法亚像素边缘检测【Matlab 248期】
【图像识别】表情检测【Matlab 288期】
【图像检测】LSD直线检测【Matlab 289期】
【图像融合】红外与可见光的融合与配准算法【Matlab 290期】
【图像识别】帧差法跌倒检测【Matlab 291期】
【图像识别】组合BCOSFIRE过滤器进行墙体裂缝识别【Matlab 292期】
【模式识别】中值滤波和二值化的跌倒检测【Matlab 293期】
【图像隐写】DCT的图像隐写【Matlab 294期】
【图像隐写】LSB的图像隐写提取【Matlab 295期】
【图像隐写】高斯模型的JPEG图像隐写【Matlab 296期】
【图像隐写】图像自适应隐写算法wow【Matlab 297期】
【模式识别】基于GUI SVM和PCA的人脸识别【Matlab 298期】
【视频识别】轨迹方法行为识别【Matlab 299期】
【模式识别】基于GUI HSV和RGB模型水果分类【Matlab 300期】
【图像处理】基于GUI数字图像处理平台【Matlab 301期】
【图像分割】视网膜图像分割【Matlab 302期】

你可能感兴趣的:(matlab,图像处理)