【问题标题】:using slider to rotate image in Matlab在 Matlab 中使用滑块旋转图像
【发布时间】:2011-07-01 14:48:22
【问题描述】:

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

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

我使用坐标轴来显示图像。

我该怎么做?

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

谢谢。

【问题讨论】:

    标签: matlab slider image-rotation


    【解决方案1】:

    这是一个示例 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。如果您指定 Tag 以便能够在代码中找到组件,也会有所帮助。

    • 在图中的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

    【讨论】:

    • 感谢您的回答,但我使用 GUIDE 构建了我的 GUI。你能给我解释一下如何在这种模式下做到这一点。
    • @Michael:我添加了关于如何在 GUIDE 中重新创建它的说明
    • 再次感谢。你能解释一下我的图片在我转动的时候变形了吗?不能正常旋转?
    • @Michael:我不确定您所说的扭曲是什么意思,但请确保您阅读了 IMROTATE 和 IMSHOW 函数的文档,并了解空间变换的工作原理......
    • @Michael:重新编辑了我的答案以解决您的问题。我再次提醒您阅读IMROTATE 文档,尤其是“算法”选项,它允许您指定要使用的插值方法(最近邻、双线性插值......)
    猜你喜欢
    • 1970-01-01
    • 2020-03-29
    • 1970-01-01
    • 2017-04-22
    • 2019-11-20
    • 2016-12-08
    • 2017-03-07
    • 2011-05-19
    • 1970-01-01
    相关资源
    最近更新 更多