필터 지우기
필터 지우기

GUI How to make multiple slider

조회 수: 1 (최근 30일)
RuiQi
RuiQi 2016년 2월 7일
Hi, I am trying to write edge detection that threshold based on length and intensity. I create a ui for it but everytime i update length then intensity got resetted and everytime i update intensity length got resetted. how do i make sure the data is kept. means if intensity 10 and length 10 and i push slider so length 100 then intensity stays at 10 not go back to 0. code below help thanks
function myui
Im = imread('42049.jpg');
threshold = 0;
length = 10;
% Create a figure and axes
f = figure('Visible','off');
ax = axes('Units','pixels');
BW = edge(Im, 'sobel', threshold);
imshow(BW);
% Slider for threshold
sld = uicontrol('Style', 'slider',...
'Min',0,'Max',1,'Value',0,...
'Position', [400 20 120 20],...
'Callback', @thresh_slider);
% Slider for length
sld = uicontrol('Style', 'slider',...
'Min',0,'Max',500,'Value',0,...
'Position', [200 20 120 20],...
'Callback', @length_slider);
% Add text for slider
txt = uicontrol('Style','text',...
'Position',[400 45 120 20],...
'String','Threshold');
txt = uicontrol('Style','text',...
'Position',[200 45 120 20],...
'String','Length');
% Make figure visble after adding all components
f.Visible = 'on';
function thresh_slider(source,callbackdata)
threshold = source.Value;
BW = edge(Im, 'sobel', threshold);
ConnectedComponents = bwlabel(BW);
a = unique(ConnectedComponents);
out = [a,histc(ConnectedComponents(:),a)];
FinalImage = zeros(size(BW,1), size(BW,2));
for i = 1:size(ConnectedComponents,1)
for j = 1:size(ConnectedComponents,2)
componentID = ConnectedComponents(i,j);
componentLength = out(componentID+1,2);
if(componentID == 0)
FinalImage(i,j) = 0;
elseif(componentLength > source.Value && componentID ~= 0)
FinalImage(i,j) = 1;
end
end
end
imshow(FinalImage);
end
function length_slider(source,callbackdata)
length = source.Value;
BW = edge(Im, 'sobel', threshold);
ConnectedComponents = bwlabel(BW);
a = unique(ConnectedComponents);
out = [a,histc(ConnectedComponents(:),a)];
FinalImage = zeros(size(BW,1), size(BW,2));
for i = 1:size(ConnectedComponents,1)
for j = 1:size(ConnectedComponents,2)
componentID = ConnectedComponents(i,j);
componentLength = out(componentID+1,2);
if(componentID == 0)
FinalImage(i,j) = 0;
elseif(componentLength > length && componentID ~= 0)
FinalImage(i,j) = 1;
end
end
end
imshow(FinalImage);
end
end

답변 (0개)

카테고리

Help CenterFile Exchange에서 Migrate GUIDE Apps에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by