Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MATLAB指南中写入轴上的当前图像_Matlab_Matlab Guide_Axes - Fatal编程技术网

在MATLAB指南中写入轴上的当前图像

在MATLAB指南中写入轴上的当前图像,matlab,matlab-guide,axes,Matlab,Matlab Guide,Axes,我的GUI有问题。在我的打开函数中,我定义了一个img_new变量作为我存储的图像 我的GUI有两个轴,一个显示原始图像,另一个显示过滤后的图像。我在一个面板中有4个过滤器和4个单选按钮。在每个代码的末尾都有一个img_new=通过radiobutton过滤器创建的图像 下面是一些代码: % --- Executes when selected object is changed in uipanel3. function uipanel3_SelectionChangeFcn(hObject,

我的GUI有问题。在我的打开函数中,我定义了一个
img_new
变量作为我存储的图像

我的GUI有两个轴,一个显示原始图像,另一个显示过滤后的图像。我在一个面板中有4个过滤器和4个单选按钮。在每个代码的末尾都有一个
img_new
=通过radiobutton过滤器创建的图像

下面是一些代码:

% --- Executes when selected object is changed in uipanel3.
function uipanel3_SelectionChangeFcn(hObject, eventdata, handles)
handles.count = handles.count + 1;

% Change filter orientation depending on which radiobutton is chosen
switch get(eventdata.NewValue,'Tag')
    case 'hte'
        h_te = zeros(handles.rows, handles.colums);

        # code of the filter...

        axes(handles.axes2);
        imshow(h_te);

        handles.img_new = h_te;

    case 'hc'
        h_c = zeros(handles.rows, handles.colums);

        # code of the filter...


        axes(handles.axes2);
        imshow(h_c);

        handles.img_new = h_c;

    case 'vlr'
        v_lr = zeros(handles.rows, handles.colums);

        # code of the filter...


        axes(handles.axes2);
        imshow(v_lr);

        handles.img_new = v_lr;

    case 'vc'
        v_c = zeros(handles.rows, handles.colums);

        # code of the filter...

        axes(handles.axes2);
        imshow(v_c);

        handles.img_new = v_c;

end
guidata(hObject, handles)
下面是
imwrite
函数:

% --------------------------------------------------------------------
function save_img_ClickedCallback(hObject, ~, handles)
% writing the new image
imwrite(handles.img_new, strcat('filtered_image_', num2str(handles.count), '.png'));
guidata(hObject, handles)
这是一个函数,用于将图像获取到
axes1
原始图像)并将其过滤到
axes2
(已过滤)

如您所见,最后我调用了panel函数,因此当加载图像时,它会自动过滤,并且
axes2
图像会发生变化

问题是,当我调用save函数时,它会保存旧的
img\u new


如果我更改单选按钮,则会刷新
img_new
,但如果未更改,则不会刷新。这应该是因为加载图像会自动调用单选按钮面板功能。

问题在于
guidata(hObject,handles)
img2\u回调
结束时,将旧句柄对象保存为最终gui状态,在
uipanel3\u SelectionChangeFcn
中进行的更新将丢失。在调用
uipannel3\u SelectionChangeFcn
后,您需要通过放置
handles=guidata(hObject,handles)手动更新句柄
handles=guidata(hObject)

(忘记哪个对guidata的调用会更新句柄,请参阅帮助),或者只需删除行
guidata(hObject,handles)在img2_回调结束时(如果代码以后要更改,则不太安全,在
uipannel3_SelectionChangeFcn
之后更新句柄是更安全的方法…

如您所说,我将其放在后面,但我不工作。旧的句柄仍被保存。
% --- Executes on button press in img2.
function img2_Callback(hObject, ~, handles)
% Read image 2
img = imread('./coimbra_estadio.jpg');
handles.img_d = im2double(img);

% image size
size_img = size(handles.img_d);
handles.colums = size_img(2);
handles.rows = size_img(1);

if rem(handles.rows,2) == 0
    handles.row_0 = ((handles.rows/2)+1);
else
    handles.row_0 = ((handles.rows/2)+0.5);
end

if rem(handles.colums,2) == 0
    handles.colum_0 = ((handles.colums/2)+1);
else
    handles.colum_0 = ((handles.colums/2)+0.5);
end

axes(handles.axes1);
imshow(img);

% Generate eventdata to call the radiobuttons function
eventdata_new.EventName = 'SelectionChanged';
eventdata_new.OldValue = get(handles.uipanel3,'SelectedObject');
eventdata_new.NewValue = get(handles.uipanel3,'SelectedObject');

uipanel3_SelectionChangeFcn(handles.uipanel3, eventdata_new, handles);
guidata(hObject, handles)