📄 ip_tvhcurv.m
字号:
function I = ip_tvhcurv(I,M,args)
% get the parameters
a2 = args{1}^2;
% get M
ndx = find(M);
% compute neighbors
Io = I(ndx);
Itmp = circshift(I,[0 -1]); Ie = Itmp(ndx);
Itmp = circshift(I,[0 1]); Iw = Itmp(ndx);
Itmp = circshift(I,1); In = Itmp(ndx);
Itmp = circshift(I,-1); Is = Itmp(ndx);
Itmp = circshift(I,[1 -1]); Ine = Itmp(ndx);
Itmp = circshift(I,[1 1]); Inw = Itmp(ndx);
Itmp = circshift(I,[-1 -1]); Ise = Itmp(ndx);
Itmp = circshift(I,[-1 1]); Isw = Itmp(ndx);
% compute weights
We = (a2 + (Ie - Io).^2 + (0.25*(Ine+In-Is-Ise)).^2).^-.5;
Ww = (a2 + (Iw - Io).^2 + (0.25*(Inw+In-Is-Isw)).^2).^-.5;
Ws = (a2 + (Is - Io).^2 + (0.25*(Ise+Ie-Iw-Isw)).^2).^-.5;
Wn = (a2 + (In - Io).^2 + (0.25*(Ine+Ie-Iw-Inw)).^2).^-.5;
% approximate new image
K(ndx) = ((Ie.*We + Iw.*Ww + In.*Wn + Is.*Ws)./ (We+Ww+Wn+Ws));
%I(ndx) = Io + 1/(2*0.5)*(Ie.*We + Iw.*Ww + In.*Wn + Is.*Ws)./ (We+Ww+Wn+Ws);
%compute neighbors
Ko = K(ndx);
Ktmp = circshift(K,[0 -1]); Ke = Ktmp(ndx);
Ktmp = circshift(K,[0 1]); Kw = Ktmp(ndx);
Ktmp = circshift(K,1); Kn = Ktmp(ndx);
Ktmp = circshift(K,-1); Ks = Ktmp(ndx);
Ktmp = circshift(K,[1 -1]); Kne = Ktmp(ndx);
Ktmp = circshift(K,[1 1]); Knw = Ktmp(ndx);
Ktmp = circshift(K,[-1 -1]); Kse = Ktmp(ndx);
Ktmp = circshift(K,[-1 1]); Ksw = Ktmp(ndx);
% compute weights
WKe = (a2 + (Ke - Ko).^2 + (0.25*(Kne+Kn-Ks-Kse)).^2).^-.5;
WKw = (a2 + (Kw - Ko).^2 + (0.25*(Knw+Kn-Ks-Ksw)).^2).^-.5;
WKs = (a2 + (Ks - Ko).^2 + (0.25*(Kse+Ke-Kw-Ksw)).^2).^-.5;
WKn = (a2 + (Kn - Ko).^2 + (0.25*(Kne+Ke-Kw-Knw)).^2).^-.5;
% approximate new image
I(ndx) = K(ndx).^3 + 0.25*(Ie.*WKe + Iw.*WKw + In.*WKn + Is.*WKs)
return
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -