⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ip_tvhcurv.m

📁 采用总变分法(TV)进行图像修复的matlab源代码。包括热扩散修复和多尺度方法。
💻 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 + -