📄 imuieq.m
字号:
CY = -1;
end
delete(ud.fig)
%=====================================================================
case '::::MouseDown'
MouseEvent(ud, 'down')
ud.MouseState = 'down';
set(ud.fig, 'UserData', ud)
%=====================================================================
case '::::MouseRelease'
MouseEvent(ud, 'release')
ud.MouseState = 'release';
set(ud.fig, 'UserData', ud)
%=====================================================================
case '::::MouseMotion'
MouseEvent(ud, 'motion')
%=====================================================================
case '::::cb_PreviewImage'
if get(ud.chkpreviewimg, 'Value')
UpdatePreview(ud)
else
CX = get(ud.img, 'UserData');
set(ud.img, 'CData', CX)
end
%=====================================================================
case '::::cb_Preview2DFR'
if get(ud.chkpreview2dfr, 'Value')
UpdatePreview(ud)
end
%=====================================================================
case '::::cb_Normalized'
UpdatePreview(ud)
%=====================================================================
case '::::cb_KSize'
temp = get(ud.linecp, 'YData');
UpdateLine(ud, 1, temp(1))
%=====================================================================
case '::::cb_Method'
if get(ud.popmethod, 'Value') == 3
set(ud.popwindow1, 'Enable', 'on')
set(ud.txt3, 'Enable', 'on')
imuieq('::::cb_Window1')
return
else
set(ud.popwindow1, 'Enable', 'off')
set(ud.txt3, 'Enable', 'off')
set(ud.txt4, 'Enable', 'off')
set(ud.edtpara, 'Enable', 'off')
end
drawnow
UpdatePreview(ud)
%=====================================================================
case '::::cb_Window1'
set(ud.txt4, 'Enable', 'on')
set(ud.edtpara, 'Enable', 'on')
switch get(ud.popwindow1, 'Value')
case 6
set(ud.txt4, 'String', 'R : ')
case 7
set(ud.txt4, 'String', 'ALPHA : ')
case 13
set(ud.txt4, 'String', 'R : ')
otherwise
set(ud.txt4, 'Enable', 'off')
set(ud.edtpara, 'Enable', 'off')
end
UpdatePreview(ud)
%=====================================================================
case '::::cb_Para'
UpdatePreview(ud)
%=====================================================================
case '::::cb_Reset'
set(ud.linecp, 'YData', zeros(16, 1))
set(ud.chkpreview2dfr, 'Value', 1)
set(ud.chkpreviewimg, 'Value', 0)
set(ud.chksnaptogrid, 'Value', 0)
set(ud.chknormalized, 'Value', 0)
set(ud.popksize, 'Value', 6)
set(ud.popmethod, 'Value', 1)
CX = get(ud.img, 'UserData');
set(ud.img, 'CData', CX)
imuieq('::::cb_Method')
temp = get(ud.linecp, 'YData');
UpdateLine(ud, 1, temp(1))
%=====================================================================
case '::::cb_Export'
prompt = {sprintf('Enter varaible name :\n')};
default = {'h'};
dlgtitle = 'Export Convoluation Kernel to Workspace';
answer = inputdlg(prompt, dlgtitle, 1, default);
if ~isempty(answer)
varName = answer{1};
if isvarname(varName)
assignin('base', varName, get(ud.fr, 'UserData'));
else
prompt = sprintf(['\\bf', varName , '\\rm is not a valid varaible name. \n\n', ...
'A valid variable name is a character string of letters, digits and', ...
'underscores, with length <= 31 and the first character a letter.']);
h = errordlg(prompt, 'Curves', ...
struct('Interpreter', 'tex', 'WindowStyle', 'modal') );
end
end
%=====================================================================
case '::::cb_Apply'
set(ud.btnapply, 'Userdata', 'apply')
set(ud.fig, 'Visible', 'off')
%=====================================================================
case '::::cb_Cancel'
set(ud.btnapply, 'Userdata', 'cancel')
set(ud.fig, 'Visible', 'off')
end
%=====================================================================
function MouseEvent(ud, event)
Sensitivity = 0.02;
temp = get(ud.axeseq, 'CurrentPoint');
LIM_X = get(ud.axeseq, 'XLim');
LIM_Y = get(ud.axeseq, 'YLim');
CurrentPointX = temp(1, 1);
CurrentPointY = temp(1, 2);
if all([CurrentPointX >= LIM_X(1), CurrentPointX <= LIM_X(2), ...
CurrentPointY >= LIM_Y(1), CurrentPointY <= LIM_Y(2)])
ThisPoint = [];
for i = linspace(0, 1, 16)
if abs(CurrentPointX - i) < Sensitivity
ThisPoint = i * 15 + 1;
break
end
end
switch event
case 'down'
if isempty(ThisPoint)
setptr(ud.fig, 'arrow')
else
setptr(ud.fig, 'closedhand')
UpdateLine(ud, ThisPoint, CurrentPointY)
end
case 'release'
ud.HotPoint = [];
if isempty(ThisPoint)
setptr(ud.fig, 'arrow')
else
setptr(ud.fig, 'hand')
end
case 'motion'
if strcmp(ud.MouseState, 'down')
if isempty(ThisPoint)
setptr(ud.fig, 'arrow')
else
setptr(ud.fig, 'closedhand')
end
if ~isempty(ThisPoint)
UpdateLine(ud, ThisPoint, CurrentPointY)
end
else
if isempty(ThisPoint)
setptr(ud.fig, 'arrow')
else
setptr(ud.fig, 'hand')
end
end
end
else
setptr(ud.fig, 'arrow')
end
%=====================================================================
function UpdateLine(ud, ThisPoint, CurrentPointY)
temp = get(ud.linecp, 'YData');
if get(ud.chksnaptogrid, 'Value')
CurrentPointY = round(CurrentPointY * 5) / 5;
end
temp(ThisPoint) = CurrentPointY;
set(ud.linecp, 'YData', temp);
temp1 = get(ud.popksize, 'Value');
temp2 = get(ud.popksize, 'String');
ksize = str2num(temp2{temp1}) - 1;
b = remez(ksize, get(ud.linecp, 'XData'), get(ud.linecp, 'YData'));
set(ud.linecp, 'UserData', b)
[h, w] = freqz(b,1,256);
set(ud.linefr, 'XData', linspace(0,1,256), 'YData', abs(h))
if get(ud.chkpreview2dfr, 'Value') | get(ud.chkpreviewimg, 'Value')
UpdatePreview(ud)
end
%=====================================================================
function UpdatePreview(ud)
set(ud.txtinfo , 'String', 'Busy')
drawnow
if get(ud.popmethod, 'Value') == 1
b = get(ud.linecp, 'UserData');
try
convkernel = ftrans2(b);
catch
set(ud.txtinfo , 'String', '')
return
end
else
temp1 = get(ud.popksize, 'Value');
temp2 = get(ud.popksize, 'String');
ksize = str2num(temp2{temp1}) - 1;
temp1 = get(ud.linecp, 'XData');
temp2 = get(ud.linecp, 'YData');
interpdata = interp1(temp1, temp2, linspace(0, 1, 512));
[f1, f2] = freqspace(ksize);
Hd = zeros(ksize);
i = 0;
for x = f1
i = i + 1;
j = 0;
for y = f2
j = j + 1;
temp = sqrt(x ^ 2 + y ^ 2);
if temp > 1
temp = 1;
end
id = round( temp * 511 + 0.5);
Hd(i, j) = interpdata(id);
end
end
switch get(ud.popmethod, 'Value')
case 2
convkernel = fsamp2(Hd);
case 3
para = str2num(get(ud.edtpara, 'String'));
switch get(ud.popwindow1, 'Value')
case 1
win = window(@bartlett, ksize);
case 2
win = window(@barthannwin, ksize);
case 3
win = window(@blackman, ksize);
case 4
win = window(@blackmanharris, ksize);
case 5
win = window(@bohmanwin, ksize);
case 6
win = window(@chebwin, ksize, para);
case 7
win = window(@gausswin, ksize, para);
case 8
win = window(@hamming, ksize);
case 9
win = window(@hann, ksize);
case 10
win = window(@kaiser, ksize);
case 11
win = window(@nuttallwin, ksize);
case 12
win = window(@rectwin, ksize);
case 13
win = window(@tukeywin, ksize, para);
case 14
win = window(@triang, ksize);
end
convkernel = fwind1(Hd, win);
case 4
win = fspecial('gaussian', ksize, 2);
win = win ./ max(win(:));
convkernel = fwind2(Hd, win);
end
end
if get(ud.chknormalized, 'Value')
temp = abs(sum(sum(convkernel)));
if temp ~= 0
convkernel = convkernel ./ temp;
end
end
set(ud.fr, 'UserData', convkernel)
if get(ud.chkpreview2dfr, 'Value')
[H, fx, fy] = freqz2(convkernel, [48 48]);
set(ud.hsurf , ...
'ZData', H, ...
'CData', H)
end
if get(ud.chkpreviewimg, 'Value')
CX = get(ud.img, 'UserData');
CX = imfilter(CX, convkernel, 'replicate');
if strcmp(class(CX), 'double')
CX(CX > 1) = 1;
CX(CX < 0) = 0;
end
set(ud.img, 'CData', CX)
end
set(ud.txtinfo , 'String', '')
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -