1. 参考文献

2. FFM模型实现

2.1 FFM模型代码

%%%%%%%%%%%%%%%%%%%%%%%%%%% Demo of Fast March Method %%%%%%%%%%%%%%%%%%%%%
% Date: 2014-10-23
% author: HSW
% HARBIN INSTITUTE OF TECHNOLOGY
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
close all
clear all
clc;% 读入图像
BAND = 1;
KNOWN = 2;
INSIDE = 3;
% 读入图像
I = imread('C10.bmp');
M = imread('mask2.png');
% 彩色图像
if size(M,3) == 3 M = rgb2gray(M);M = M>0;
end
figure;
imshow(I, []);
title('原图像'); I = im2double(I);
Temp(:,:,1) =  M;
Temp(:,:,2) =  M;
Temp(:,:,3) =  M;
I = (1-Temp).*I;  %+ Temp.*0.5;
% % 灰度图像
% if ndims(M)
%     M = rgb2gray(M);
%     I = rgb2gray(I);
% end
% M = M<1;
% I = double(I);
% Temp = M;
% I = (1-Temp).*I + Temp.*255;
figure;
imshow(I,[]);
title('原图像');
% 标记
[m,n,dims] = size(I);
M1 = (bwdist(M,'cityblock') <= 1);
%初始化flag值
flag = INSIDE*M + KNOWN*(1-M);
flag =(1-M1+M).*flag+BAND*(M1-M);
%初始化 T
T = zeros([m,n]) + 1e6.*M;
IterMax = 10;
for iter = 1:IterMax[I] = fast_march_method(I,T,flag);
endfigure;
imshow(I,[]);
title('修复结果');

2.2 FFM模型

function  [I,T,flag] = fast_march_method(I,T,flag)
% input:
%      I: 待修复图像
%      M: 缺损区域mask,缺损区域 = 1
%      T: 距离标记矩阵
%      flag:标记矩阵,BAND/KNOWN/INSIDE
% output:
%       I: 修复图像
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
BAND = 1;
KNOWN = 2;
% INSIDE = 3;
[m,n,dims] = size(I);
iter = 0;
while find(flag == BAND)  %存在待修复点% 获取T最小的点的坐标xposition = 1;yposition = 1;Tmin = 1e6;for i = 1:mfor j = 1:nif (flag(i,j) == BAND) && (T(i,j) < Tmin )xposition = i;yposition = j;Tmin = T(i,j);endendendflag(xposition,yposition) = KNOWN;switch dimscase 3 %彩色图像[I,T,flag] = four_solve(I,T,flag,xposition,yposition,3); %更新四领域,注意三个通道要同时处理otherwise %灰度图像[I,T,flag] = four_solve(I,T,flag,xposition,yposition,1); %更新四领域end %switchiter = iter + 1;if mod(iter,2000) == 0figure;imshow(I,[]);end
end %while
end %functionfunction  [I,T,flag] = four_solve(I,T,flag,xposition,yposition,channel)
% input:
%      xposition: x坐标
%      yposition: y坐标
%      T:距离标记矩阵
%      flag: 标记BAND,KNOWN,INSIDE
%      channel:图像通道
% output:
%      T: 距离标记矩阵
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
pSize = 1;
BAND = 1;
KNOWN = 2;
INSIDE = 3;
FourNeighbor = [xposition-1,yposition; xposition,yposition-1; xposition+1,yposition; xposition,yposition+1];
for i = 1:4x = FourNeighbor(i,1);y = FourNeighbor(i,2);if ( flag(x,y) ~= KNOWN)if (flag(x,y) == INSIDE)flag(x,y) = BAND;I = fast_march_method_inpaint(I,T,flag,x,y,channel,pSize); %进行修复endT(x,y) = min(T(x,y),min(four_solve_min(T,flag,x-1,y,x,y-1),min(four_solve_min(T,flag,x+1,y,x,y-1),min(four_solve_min(T,flag,x-1,y,x,y+1),four_solve_min(T,flag,x+1,y,x,y+1)))));  %更新距离end
end%for iend% functionfunction sol = four_solve_min(T,flag,x1,y1,x2,y2)
% input:
%      坐标点(x1,y1),(x2,y2)
% output:
%     sol: 距离
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
KNOWN = 2;
sol = 100000;
if flag(x1,y1) == KNOWNif flag(x2,y2) == KNOWNr = sqrt( abs(2 - ((T(x1,y1) - T(x2,y2))^2)));s = (T(x1,y1) + T(x2,y2) - r)/2;if (s >= T(x1,y1)) && (s >= T(x2,y2))sol = s;elses = s + r;if ( (s >= T(x1,y1)) && (s >= T(x2,y2)) )sol = s;endendelsesol = 1 + T(x1,y1);end
elseif flag(x2,y2) == KNOWNsol = 1 + T(x1,y1);
end %if
end %functionfunction I = fast_march_method_inpaint(I,T,flag,x,y,channel,pSize)
% input:
%       I: 待修复图像
%       x: 待修复点x坐标
%       y: 待修复点y坐标
%       channel: 颜色通道
%       pSize: 利用领域块参数(2*pSize + 1) X (2pSize + 1)
% output:
%       I:修复图像
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
KNOWN = 2;
INSIDE = 3;
sum1 = 0;
sum2 = 0;
sum_Ex0n=0;
sum_Ex0d=0;
sum_Ey0n=0;
sum_Ey0d=0;
dims = channel;
switch dimscase 1 %灰度图像%求等照度线方向for k = x - pSize:x+pSizefor l = y-pSize:y+pSizeif flag(k,l) == KNOWNGradientIx = I(k,l) - I(k-1,l-1);GradientIy = I(k-1,l) - I(k,l-1);IsoIx = -GradientIy;IsoIy = GradientIx;d0=1/(1+sqrt((k-x)^2+(l-y)^2));sum_Ex0n=sum_Ex0n+d0*IsoIx;sum_Ex0d=sum_Ex0d+d0;sum_Ey0n=sum_Ey0n+d0*IsoIy;sum_Ey0d=sum_Ey0d+d0;Dst(k,l) = d0;%式(2)IsoIx = IsoIx/(1+sqrt(IsoIx^2+IsoIy^2));IsoIy = IsoIy/(1+sqrt(IsoIx^2+IsoIy^2));Dirctx(k,l) = IsoIx;Dircty(k,l) = IsoIy;endendend% (x,y)的等照度线方向。Ex0=sum_Ex0n/sum_Ex0d;Ey0= sum_Ey0n/sum_Ey0d;% (x,y)归一化Ex0=Ex0/(1+sqrt(Ex0^2+Ey0^2));Ey0=Ey0/(1+sqrt(Ex0^2+Ey0^2));%估值I(x,y)for k = x - pSize:x+pSizefor l = y-pSize:y+pSizeif flag(k,l) == KNOWNQ= exp(Ex0*Dirctx(k,l)+Ey0* Dircty(k,l));% 式(1)W(k,l)=Q*Dst(k,l)*(1/(1+T(k,l)));%                     if flag(k+1,l) == KNOWN && flag(k-1,l) == KNOWN && flag(k,l+1) == KNOWN && flag(k,l-1) == KNOWN%                         sum1 = sum1+(I(k,l) + (I(k+1,l) - I(k-1,l))*(k-x)  + (I(k,l+1) - I(k,l-1))*(l-y))*W(k,l);%                     elseif flag(k+1,l) == KNOWN && flag(k-1,l) == KNOWN%                         sum1 = sum1 + ( I(k,l) + (I(k+1,l) - I(k-1,l))*(k-x) + (I(k-1,l) - I(k,l-1))*(l-y))*W(k,l);%                     elseif flag(k,l+1) == KNOWN && flag(k,l-1) == KNOWN%                         sum1 = sum1 + ( I(k,l) +  (I(k,l) - I(k-1,l-1))*(k-x) + (I(k,l+1) - I(k,l-1))*(l-y))*W(k,l);%                     else%                         sum1 = sum1 + I(k,l)*W(k,l);%                     endsum1 = sum1 + I(k,l)*W(k,l);sum2=sum2+W(k,l);endendendI(x,y)=sum1/sum2;case 3for channel = 1:dims%求等照度线方向for k = (x - pSize):(x+pSize)for l = (y-pSize):(y+pSize)if flag(k,l) == KNOWNGradientIx = I(k,l,channel) - I(k-1,l-1,channel);GradientIy = I(k-1,l,channel) - I(k,l-1,channel);IsoIx = -GradientIy;IsoIy = GradientIx;d0=1/(1+sqrt((k-x)^2+(l-y)^2));sum_Ex0n = sum_Ex0n+d0*IsoIx;sum_Ex0d = sum_Ex0d+d0;sum_Ey0n = sum_Ey0n+d0*IsoIy;sum_Ey0d = sum_Ey0d+d0;Dst(k,l) = d0;IsoIx = IsoIx./(0.1+sqrt(IsoIx^2+IsoIy^2));IsoIy = IsoIy./(0.1+sqrt(IsoIx^2+IsoIy^2));Dirctx(k,l) = IsoIx;Dircty(k,l) = IsoIy;endendend%进行估值Ex0 = sum_Ex0n/sum_Ex0d;% (i,j)的等照度线方向。Ey0 = sum_Ey0n/sum_Ey0d;Ex0 = Ex0/(0.1+sqrt(Ex0^2+Ey0^2));Ey0 = Ey0/(0.1+sqrt(Ex0^2+Ey0^2));for k = (x - pSize):(x+pSize)for l = (y-pSize):(y+pSize)if flag(k,l) == KNOWNQ = exp(Ex0*Dirctx(k,l)+Ey0* Dircty(k,l));% 式(1)W = Q*Dst(k,l)*(1/(1+abs(T(k,l) - T(x,y)) ));%                         if flag(k+1,l) == KNOWN && flag(k-1,l) == KNOWN && flag(k,l+1) == KNOWN && flag(k,l-1) == KNOWN%                             sum1 = sum1+(I(k,l,channel) + (I(k+1,l,channel) - I(k-1,l,channel))*(k-x)  + (I(k,l+1,channel) - I(k,l-1,channel))*(l-y))*W(k,l);%                         elseif flag(k+1,l) == KNOWN && flag(k-1,l) == KNOWN%                             sum1 = sum1 + ( I(k,l,channel) + (I(k+1,l,channel) - I(k-1,l,channel))*(k-x))*W(k,l);%                         elseif flag(k,l+1) == KNOWN && flag(k,l-1) == KNOWN%                             sum1 = sum1 + ( I(k,l,channel) + (I(k,l+1,channel) - I(k,l-1,channel))*(l-y))*W(k,l);%                         else%                             sum1 = sum1 + I(k,l,channel)*W(k,l);%                         endsum1 = sum1 + I(k,l,channel)*W;sum2=sum2+W;end%if endendI(x,y,channel) = sum1/sum2; end %for channelotherwisedisplay('ERROR !');
end %switch
end %function

3. 模型效果

图像修复序列——FFM模型相关推荐

  1. 图像修复序列——BSCB模型

    1. 参考文献 2. BSCB模型代码 2.1 BSCB模型demo % demo_BSCB.m % Author: HSW % Date: 2015/3/25 % HARBIN INSTITUTE ...

  2. 图像修复序列——FOE模型

    1. 参考文献 2. FOE模型 2.1 FOE 模型实现 %demo_FOE.m % Author: HSW % Date: 2015/3/25 % HARBIN INSTITUTE OF TECH ...

  3. 图像修复序列——混合稀疏表示(Hybrid Sparse Representations)模型

    1. 参考文献 2. Hybrid Sparse Representations模型 % demo_Hybrid_Sparse_Representation.m % Author: HSW % Dat ...

  4. 图像算法原理与实践——图像修复之 全变分模型

    在图像算法的高层次处理中,有一类很典型的应用,就是图像修复算法.图像在采集.传输.预处理过程中,都可能会发生图像数据被修改.损失和缺失等问题(例如:部分图像内容被污染.雾霾等),另外,在实际室外拍照的 ...

  5. 图像算法原理与实践——图像修复之全变分模型

    在图像算法的高层次处理中,有一类很典型的应用,就是图像修复算法.图像在采集.传输.预处理过程中,都可能会发生图像数据被修改.损失和缺失等问题(例如:部分图像内容被污染.雾霾等),另外,在实际室外拍照的 ...

  6. 图像修复 图像补全_图像修复简介

    图像修复 图像补全 In practical applications, images are often corroded by noise. These noises are dust or wa ...

  7. AIGC:Stable Diffusion(一项普通人就能实现的AI前沿科技)的简介、Stable Diffusion2.0的改进、安装、使用方法(文本到图像/图像修改/超分辨率/图像修复)之详细攻略

    AIGC:Stable Diffusion(一项普通人就能实现的AI前沿科技)的简介.Stable Diffusion2.0的改进.安装.使用方法(文本到图像/图像修改/超分辨率/图像修复)之详细攻略 ...

  8. 苏黎世华人博士提出模型SwinIR,只用33%的参数量就碾压图像修复领域sota

    来源:新智元 [导读]参数量和模型的性能有绝对关系吗?苏黎世华人博士提出SwinIR模型,实验结果告诉你,越小的模型还可能更强!SwinIR使用Transformer力压CNN,又在图像修复领域屠榜, ...

  9. 图像修复中的TV模型

    转载至http://blog.csdn.net/hujingshuang/article/details/44257179 前言:图像修复是一项非常有意义的研究工作,比如我们生活中的照片被污染,再比如 ...

最新文章

  1. spring26-2: bean的作用域
  2. 奇葩说之RTC的那些事
  3. jQuery Easy UI ProgressBar(进度条)组件
  4. JS 和 Java 中URL特殊字符编码方式
  5. 修改WebBrowser控件的内核解决方案
  6. unityar自动识别人脸_unity人脸识别源码Dlib FaceLandmark Detector
  7. cvpr2019论文汇总(论文/代码/项目/论文阅读)
  8. Macbook开启HIDPI(2K显示器)
  9. ov5640帧率配置_码率、帧率、分辨率对监控有什么影响?怎么调更合适?
  10. chrome浏览器美化插件:让您的浏览器页面冒水泡, 游小鱼儿
  11. 读网卡MAC地址的几种方法
  12. C语言必背知识点(期末不挂科)
  13. Passed arguments
  14. luoguP1357 花园
  15. 一周AI要闻回顾 | FB新研究颠覆CNN,加州新政允许无人卡车路测
  16. Excel·VBA工作簿拆分所有工作表单独保存
  17. 【北亚数据恢复】raid损坏导致硬盘灯报警离线,存储无法使用的数据恢复
  18. python中logging库使用总结
  19. vue版本控制器nvm安装使用教程
  20. 前端开发_HTML5_CSS部分-动画特效(animation)

热门文章

  1. 门禁系统服务器含义,门禁系统运用有讲究
  2. AES GCM 算法
  3. 第117章 SQL函数 REPLICATE
  4. Codeforces Round #839 (Div. 3) C. Different Differences
  5. 联想电脑chrome浏览器打开总是自动跳转到百度界面
  6. Android中app进程ABI确定过程
  7. 技术 | 服务器安全防护 | 服务器并不像您想象的那么安全
  8. mysql 516,jsp516期刊学报网络投稿系统mysql
  9. 冰点免费下载百度文库等资料
  10. c语言关于内存笔试,4、C语言面试笔试--内存操作-指针