这个例子展示了如何制作一个GUI,在滚动面板中并排显示两个图像,并在位置和放大倍数上同步。
首先,定义一个用于构建应用程序的函数my_image_compare_tool
,它附在示例的最后。
在定义了构建应用程序的函数之后,测试应用程序。
我= imread (“flamingos.jpg”);L = rgb2lightness(我);Iedge =边缘(L,“精明”);
在应用程序中显示图像。当你在Overview工具中移动细节矩形或改变一个图像的放大,两个图像都会响应。
my_image_compare_tool(我Iedge);
的my_image_compare_tool
函数接受两个图像作为输入参数,并在滚动面板中显示这些图像。自定义工具还包括一个概述工具和一个放大框。注意,该函数抑制了图形窗口中的工具栏和菜单栏,因为可滚动导航与标准MATLAB™图形窗口导航工具不兼容。
为了同步滚动面板,该函数在使用回调的工具和滚动面板API函数之间建立连接。这个函数指定了一个回调函数,在每次放大率改变时执行。指定的函数是setMagnification
另一个API滚动面板功能。因此,每当其中一个滚动面板的放大倍数发生变化时,另一个滚动面板也会相应改变其放大倍数。该工具建立了一个类似的连接位置变化。
函数my_image_compare_tool (left_image right_image)%创建数字hFig =图(“工具栏”,“没有”,...菜单条的,“没有”,...“名字”,“我的图像比较工具”,...“NumberTitle”,“关闭”,...“IntegerHandle”,“关闭”);显示左侧图像subplot(121) hImL = imshow(left_image);右显示图像subplot(122) hImR = imshow(right_image);为左边的图像创建一个滚动面板hSpL = imscrollpanel (hFig hImL);集(hSpL,“单位”,“归一化”,...“位置”,[0 0.1 .5 0.9])为右边的图像创建滚动面板hSpR = imscrollpanel (hFig hImR);集(hSpR,“单位”,“归一化”,...“位置”,[0.5 0.1 .5 0.9])添加放大盒hMagBox = immagbox (hFig hImL);pos =得到(hMagBox,“位置”);集(hMagBox,“位置”,[0 0 pos(3) pos(4)])%%添加概述工具imoverview (hImL)%%从滚动面板获取apiapiL = iptgetapi (hSpL);apiR = iptgetapi (hSpR);%%同步左右滚动面板apiL.setMagnification (apiR.getMagnification ()) apiL.setVisibleLocation (apiR.getVisibleLocation ())%当左侧滚动面板的放大倍数改变时,%告诉右边的滚动面板apiL.addNewMagnificationCallback (apiR.setMagnification);%当右边滚动面板的放大倍数改变时,%通知左侧滚动面板apiR.addNewMagnificationCallback (apiL.setMagnification);%当左侧滚动面板上的位置改变时,%通知右边滚动面板apiL.addNewLocationCallback (apiR.setVisibleLocation);%当右边滚动面板上的位置改变时,%通知左侧滚动面板apiR.addNewLocationCallback (apiL.setVisibleLocation);结束
imscrollpanel
|immagbox
|imoverview