Matlab函数句柄调用图像K均值分类_function varargout = classification_outputfcn(hobj-程序员宅基地

技术标签: matlab  image  K-means分类  编程  gui  


Matlab函数句柄


参考:《Matlab实用教程》


Matlab中提供了函数句柄(function handle)的使用,定义方法为:

         h_function1 = @function1;

        或

         h_function1 = str2func(function1);

函数句柄包含了函数的路径、函数名、类型及可能存在的重载方法。

函数句柄有什么作用呢?

(1)函数的调用,范围更广、速度更快;

(2)使函数调用像使用变量一样方便简单;


例如在GUI设计中,

以函数句柄作为结构数组元素:

gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @guideTemp2_OpeningFcn, ...
                   'gui_OutputFcn',  @guideTemp2_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);


点击按钮,使用函数句柄执行子函数 ------  K均值图像分类

function pushbutton1_Callback(hObject, eventdata, handles)
[fname,pname] = uigetfile('*.*','Select Image');
I_rgb = imread([pname,fname]);
feval(@KmeansTemp1, I_rgb, handles );


GUI完整代码:

function varargout = guideTemp2(varargin)

% Last Modified by GUIDE v2.5 15-Nov-2016 15:14:25

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @guideTemp2_OpeningFcn, ...
                   'gui_OutputFcn',  @guideTemp2_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before guideTemp2 is made visible.
function guideTemp2_OpeningFcn(hObject, eventdata, handles, varargin)
% Choose default command line output for guideTemp2
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes guideTemp2 wait for user response (see UIRESUME)
% uiwait(handles.figure1);
global axes1_h; 
axes1_h = handles.axes1;

% --- Outputs from this function are returned to the command line.
function varargout = guideTemp2_OutputFcn(hObject, eventdata, handles) 
% Get default command line output from handles structure
varargout{1} = handles.output;


% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
[fname,pname] = uigetfile('*.*','Select Image');
I_rgb = imread([pname,fname]);
feval(@KmeansTemp1, I_rgb, handles );



% --- Executes during object creation, after setting all properties.
function axes1_CreateFcn(hObject, eventdata, handles)
% Hint: place code in OpeningFcn to populate axes1


k均值图像分类函数代码:

function   KmeansTemp1( I_rgb, handles )
% 
%   Image Classification by K-means

axes(handles.axes1);  imshow(I_rgb);  hold on;  title('Origin Image');
% RGB to lab 
C = makecform('srgb2lab');        
I_lab = applycform(I_rgb, C);
 
ab = double(I_lab(:,:,2:3));      
nrows = size(ab,1);               
ncols = size(ab,2);               
ab = reshape(ab,nrows*ncols,2);   
nColors = 4;                      
[cluster_idx,cluster_center] = kmeans(ab,nColors,'distance','sqEuclidean','Replicates',3); 
%使用k均值聚类算法得到的结果对图像进行标记
pixel_labels = reshape(cluster_idx,nrows,ncols);  
axes(handles.axes2);   imshow(pixel_labels,[]);    title('Cluster Image');
%--------segmented_images------
segmented_images = cell(1,4);               
rgb_label = repmat(pixel_labels,[1 1 3]);    
for k = 1:nColors
    color = I_rgb;
    color(rgb_label ~= k) = 0;
    segmented_images{k} = color;
end

axes(handles.axes3);
ntemp = round(sqrt(nColors));
for i=1:nColors
    h(i)=subplot(ntemp,ntemp,i); 
    imshow(segmented_images{i});
end
%annotation(gcf,'textbox','String',{'Segmented Images'},'FontSize',15,...
%           'Position',[0.38 0.92 0.36 0.06],'edgecolor',get(gcf,'color'));

end
实验结果:

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wangleiwavesharp/article/details/53167992

智能推荐

[西柚仔]Gateway网关(二)路由、 断言、 过滤 +实战(源码)_什么是断言 路由 过滤器-程序员宅基地

文章浏览阅读347次。Gateway网关(二)路由、 断言、 过滤 +实战(源码)前言今天给大家讲解一下Gateway三大核心:Route(路由)、Predicate(断言)和Filter(过滤),然后给大家演示代码实操。Route(路由):路由是构建网关的基本模块,它由ID,目标URL,一系列的断言和过滤器组成,如断言为true则匹配路由。Predicate(断言):断言是JDK8的新特性,可以参考java.util.function.Predicate。断言是编程术语,表示为一些布尔表达式,程序员相信在程序中的某个特_什么是断言 路由 过滤器

手机号正则匹配规则_23、使用正则完成市面上手机规则的编写、随机生成11位数然后通过正则匹配出符合规-程序员宅基地

文章浏览阅读557次。$isMob = "/^1[3-9]\d{9}$/";_23、使用正则完成市面上手机规则的编写、随机生成11位数然后通过正则匹配出符合规

blender中文三维立体文字制作方法_blender怎么做立体字-程序员宅基地

文章浏览阅读2w次。启动blender后使用左侧工具栏;“Create”创建 → “Text”文本 ;选中刚刚创建的text,点击键盘tab键,或者调整到编辑模式,或者在对象目录树中选中刚刚创建的text对象;这时候变为可编辑状态,英文字母或者数字可以直接输入,输入后左下角会出现insert text的对话面板;中文无法在blender中直接输入,所以要打开一个记事本,输入中文,然后复制中文,..._blender怎么做立体字

计算机网络 第二章 物理层 笔记-程序员宅基地

文章浏览阅读97次。b站 王道计算机考研 计算机网络 笔记

Vue + elementUi 实现菜单无限级的分类导航_vue 菜单分类-程序员宅基地

文章浏览阅读4.4k次。Vue + elementUi 实现菜单无限级的分类导航[ { "id": 1, "parent_id": 0, "menu_name": "第一级菜单 1", "sorting": 0, "node": [ { "id": 2, ..._vue 菜单分类

STB数据集使用-程序员宅基地

文章浏览阅读1.1k次。目录STB数据集一. 数据集简介二. 数据集的使用三. 参考文献STB数据集一. 数据集简介数据介绍STB数据集来源于这篇论文:A hand pose tracking benchmark from stereo matching.数据集内容:Our stereo hand pose benchmark contains sequences with 6 different b..._stb数据集

随便推点

计算机图形学知识点_计算机图形学的两个核心问题分别是什么-程序员宅基地

文章浏览阅读1.3k次。1 什么是计算机图形学数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法。虽然通常认为CG是指三维图形的处理,事实上也包括了二维图形及图像的处理。 计算机图形学主要包含四大部分的内容:建模(Modeling)、渲染(Rendering)、动画(Animatio..._计算机图形学的两个核心问题分别是什么

ai人工智能论文写作方法有哪些?-程序员宅基地

文章浏览阅读344次,点赞9次,收藏8次。aipaperpass作为一款智能写作助手,集成了上述多种AI人工智能论文写作方法。它不仅可以提供论文写作思路、快速生成初稿、检查语法和拼写错误等功能,还能自动摘要、推荐内容、格式化排版等。这些功能使得aipaperpass成为一款强大的论文写作工具,能够帮助研究者更加高效、准确地完成论文的撰写工作。

基于ffmpeg给视频添加时间字幕_ffmpeg 添加时间文字-程序员宅基地

文章浏览阅读2.5k次。FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序,我们可以基于ffmpeg对视频进行各种操作。本文主要介绍基于ffmpeg给视频添加字幕,字幕的内容为视频所播放的时间(故需要安装ffmpeg,具体可以的1.1进行安装配置)。所涉及到的知识主要为字幕文件格式。_ffmpeg 添加时间文字

因特网的概述_因特网图标描述-程序员宅基地

文章浏览阅读4.4k次。因特网的概念因特网(Internet)是世界范围内计算机网络的集合。因特网是网络的网络,将全球异构的网络互联起来形成的网络。因特网采用分组交换技术。基于ISP的因特网结构:ISP:Internet Service Provider提供因特网接入服务的企业或运营商如图是多层次的ISP结构示意图:ISP结构下,信息层层推进,分层传递。因特网的硬件组成名称作用终端系统主机、服务器、PDA,运行网络程序通信介质有线介质:双绞线、同轴电缆、光纤。无线介质:无线电波、_因特网图标描述

微信小程序wxss使用var变量_wxss var-程序员宅基地

文章浏览阅读7.7k次。开始用:root {}发现没有效果,后来查了下需要改成 page{} 就可以了:page {--ion-color-:red;}.var-color{ color: var(--ion-color-);}_wxss var

java内存管理-程序员宅基地

文章浏览阅读400次。首先我们要明白一点,我们所使用的变量就是一块一块的内存空间!!一、内存管理原理:在java中,有java程序、虚拟机、操作系统三个层次,其中java程序与虚拟机交互,而虚拟机与操作系统间交互!这就保证了java程序的平台无关性!下面我们从程序运行前,程序运行中、程序运行内存溢出三个阶段来说一下内存管理原理!1、程序运行前:JVM向操作系统

推荐文章

热门文章

相关标签