3

我在 Matlab 中有一个 GUI(使用 GUIDE),它的外观是这样的:

在此处输入图像描述

我想使用滑块旋转图像并实时显示变化。

我使用轴来显示图像。

我怎样才能做到这一点?

编辑:我正在构建 OCR 应用程序。这就是我旋转盘子时的样子,数字完全变形了。

在此处输入图像描述

谢谢。

4

1 回答 1

8

这是一个示例 GUI:

function rotationGUI()
    %# read image
    I = imread('cameraman.tif');

    %# setup GUI
    hFig = figure('menu','none');
    hAx = axes('Parent',hFig);
    uicontrol('Parent',hFig, 'Style','slider', 'Value',0, 'Min',0,...
        'Max',360, 'SliderStep',[1 10]./360, ...
        'Position',[150 5 300 20], 'Callback',@slider_callback) 
    hTxt = uicontrol('Style','text', 'Position',[290 28 20 15], 'String','0');

    %# show image
    imshow(I, 'Parent',hAx)

    %# Callback function
    function slider_callback(hObj, eventdata)
        angle = round(get(hObj,'Value'));        %# get rotation angle in degrees
        imshow(imrotate(I,angle), 'Parent',hAx)  %# rotate image
        set(hTxt, 'String',num2str(angle))       %# update text
    end
end

在此处输入图像描述


如果您更喜欢在 GUIDE 中构建 GUI,请执行以下步骤:

  • 创建 GUI,并添加必要的组件:轴、滑块、静态文本(拖放)

  • 使用“属性检查器”,根据需要更改滑块属性:: Min/Max/Value/SliderStep。如果您分配 aTag以便能够在代码中找到组件,也会有所帮助。

  • 在图的xxxx_OpeningFcn函数中,读取并存储handles结构中的图像,然后显示它:

    句柄.I = imread('cameraman.tif');
    imshow(I, 'Parent',findobj(hObject,'Tag','imgAxis')) %# 使用你分配的标签
    guidata(hObject, 句柄); %# 更新句柄结构
  • 为您的滑块创建一个回调事件处理程序,并添加代码:
    角度=圆形(get(hObject,'Value'));
    imshow(imrotate(handles.I,角度))

编辑: 图像旋转是一种仿射变换,它将输入图像像素的位置 (x,y) 映射到输出图像的新坐标 (x2,y2) 上。问题是输出坐标可能并不总是整数。由于数字图像是在离散像素的网格上表示的,因此采用了某种形式的重采样/插值(这就是为什么直线在某些角度旋转时可能看起来参差不齐的原因)。

在此处输入图像描述

(插图借自:Understanding Digital Image Interpolation

于 2011-07-02T12:57:05.250 回答