基于MATLAB边缘检测博文

界面GUI的设计

整个设计的人机交互界面GUI需要人性化,并且突出边缘检测前后图像的对比,可以在界面灵活地选取不同算法。设计草图如图4-1所示。

GUI界面的制作

该人机交互界面GUI,具有界面友好,容易操作等特征。首先打开matalb软件,在命令窗口command window输入guide,并且敲击回车键,进入matlab GUI快速打开方式窗口。出现如下图:

点击OK确定,进入GUI编辑界面窗口。

在设计上,拉动2个大小完全相同的Axes方框,用于分别放置边缘检测图像前后对比图像,以达到直观对比效果。界面上制作一个菜单的打开按钮,用于打开选择所要边缘检测处理的图像,句柄内填充以下代码以实现功能。

filename, pathname = uigetfile({'*.bmp';'*.jpg';'*.jpeg'},'Pick an image-file');

if isequal(filename,0) | isequal(pathname,0)

disp('User pressed cancel');

else

disp('User selected ', fullfile(pathname, filename))

end

x=imread(filename);

width,height,Cnums=size(x);

a=log2(width);

b=log2(height);

axes(handles.axes2);

imshow(zeros(256,256));

if (Cnums~=1)

if (width>256)|(height>256)

W=max(width,height);

else

W=256;

end

for m=1:W

for n=1:W

if (m<=width)&(n<=height)

extendx(m,n,:)=x(m,n,:);

else

extendx(m,n,:)=realmax;

end

end

end

axes(handles.axes1);

imshow(extendx);

handles.rgb=x;

msgbox('Please transform it to a gray image or it can not be processed correctly','fileopening','warning');

elseif (width>256)|(height>256)

W=max(width,height);

for m=1:W

for n=1:W

if (m<=width)&(n<=height)

extendx(m,n)=x(m,n);

else

extendx(m,n)=realmax;

end

end

end

axes(handles.axes1);

imshow(extendx);

msgbox('The height or width is larger than 256 or they are both larger than 256!','fileopening','warning')

elseif (width<256)|(height<256)

for m=1:256

for n=1:256

if (m<=width)&(n<=height)

extendx(m,n)=x(m,n);

else

extendx(m,n)=realmax;

end

end

end

axes(handles.axes1);

imshow(extendx);

msgbox('The height or width is less than 256 or they are both less than 256!','fileopening','warning');

else

axes(handles.axes1);

imshow(x);

end

handles.imdata=x;

handles.reload=handles.imdata;

guidata(hObject, handles);

打开的实现功能如下:

在算法选择上,也是利用菜单的下拉按钮pushbutton的形式实现,如下图:

图4-2 算法选择菜单

另外,为了从本质上解释图像边缘检测达到效果的原因,特别在GUI界面上设计了2个大小完全一样的axes,用于呈现边缘检测前后两图像的灰度直方图。通过bitton按钮以实现显示直方图。实现的代码如下:

if isequal(handles.Img1, 0)

msgbox('请载入原图像!', '提示信息');

return;

end

if isequal(handles.Img2, 0)

msgbox('请进行边缘检测处理!', '提示信息');

return;

end

运行效果示意图

相关推荐
kruptos4 小时前
分布式系统怎么“选主“?Raft 共识一次讲清
开发语言·分布式·php·共识算法
吴声子夜歌4 小时前
ApacheCommons——commons-cli(命令行参数解析)
java·开发语言·apache
find1star4 小时前
LeetCode 141:环形链表
java·算法·leetcode·链表
迅翼SwiftWing4 小时前
编队系列(总)|固定翼编队如何实现稳定飞行?通信架构、协同算法与工程约束深度解析
算法·架构
LB21125 小时前
力扣160 21 86
算法·leetcode·职场和发展
benchmark_cc5 小时前
REST API 和 Python SDK 应该怎么选?量化交易数据接口选型实战
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
王的宝库5 小时前
Go 项目结构:从单文件到标准工程布局
开发语言·后端·golang
Tairitsu_H5 小时前
[C++] 深入理解红黑树:封装set与map
开发语言·c++·set·map·红黑树·模拟实现
泡海椒6 小时前
JQuick-Curl 性能分析:并发场景下的性能表现与调优,第三方接口调用不只要快写也要稳跑
java·开发语言·okhttp
小智老师PMP6 小时前
2026深度解析|PMP第八版与NPDP核心侧重点本质区别(管理类证书怎么选)
开发语言·分布式·算法·职场和发展·产品经理