一、FMM+Criminisi算法简介

1 FMM算法
FMM算法是由Telea在2004年提出的,主要思想是先处理待修复区域边缘的像素,然后逐步向内推进,直到所有空洞点修复完毕。设Λ为待修复区域,Λ为区域Λ的边界,p为区域Λ的任意一点,在点p周围已知图像内选择一邻域U(p)。为了填充更加精确,增加已知像素点q对待填充空洞点p的影响,添加一个权重函数w(p,q),在邻域U(p)尺度较小时,对点p一阶估计:

其中I位像素值,I(q)为q点的梯度,w(p,q)=dir(p,q)dst(p,q)lev(p,q),dit(p,q)为距离因子,反映了已知像素q对待填充空洞点p的距离影响;lev(p,q)为水平集因子,反映了到达时间的影响;dir(p,q)为方向因子,反映了已知像素q对待填充空洞点p的纹理相关性的影响。对边界填充完后,需要不断迭代上述步骤,逐渐收缩边界直至空洞区域修复完毕。

2 Criminisi 算法
Criminisi 算法将图像结构信息作为图像修复顺序参考,在修复过程中能根据图像信息合理安排修复顺序。Criminisi 算法除了对大区域破损图像的修复有较好效果,其执行效率也有明显优势。

2.1 Criminisi 算法原理

2.2 算法流程
Criminisi 算法流程关键在于破损区域的填补顺序。实现步骤为:

二、部分源代码

function varargout = mygui(varargin)
% MYGUI MATLAB code for mygui.fig
%      MYGUI, by itself, creates a new MYGUI or raises the existing
%      singleton*.
%
%      H = MYGUI returns the handle to a new MYGUI or the handle to
%      the existing singleton*.
%
%      MYGUI('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in MYGUI.M with the given input arguments.
%
%      MYGUI('Property','Value',...) creates a new MYGUI or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before mygui_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to mygui_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help mygui% Last Modified by GUIDE v2.5 25-Nov-2021 09:35:16% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...'gui_Singleton',  gui_Singleton, ...'gui_OpeningFcn', @mygui_OpeningFcn, ...'gui_OutputFcn',  @mygui_OutputFcn, ...'gui_LayoutFcn',  [] , ...'gui_Callback',   []);
if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});
endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
elsegui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT% --- Executes just before mygui is made visible.
function mygui_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to mygui (see VARARGIN)% Choose default command line output for mygui
handles.output = hObject;% Update handles structure
guidata(hObject, handles);% UIWAIT makes mygui wait for user response (see UIRESUME)
% uiwait(handles.figure1);
addpath(genpath('FFM_inpaint'));
addpath(genpath('get_mask'));
addpath(genpath('criminisi_inpaint'));set(figure,'Visible','off');global I1_g I2_g I1_mask I2_mask;
I1_mask=[];
I2_mask=[];
img1 = imread('img1.JPG');
img1 = imresize(img1, 0.4); %为了提高运算速度,缩小图片
I1_g = img1;img2 = imread('img2.JPG');
img2 = imresize(img2, 0.2); %缩小图片
I2_g = img2;axes(handles.axes1);
imshow(img1);% --- Outputs from this function are returned to the command line.
function varargout = mygui_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Get default command line output from handles structure
varargout{1} = handles.output;% --- Executes on selection change in popupmenu1.
function popupmenu1_Callback(hObject, eventdata, handles)
% hObject    handle to popupmenu1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Hints: contents = cellstr(get(hObject,'String')) returns popupmenu1 contents as cell array
%        contents{get(hObject,'Value')} returns selected item from popupmenu1
global I1_g I2_g;
pic_num=get(hObject,'Value');
if pic_num==1img = I1_g;
elseimg = I2_g;
end
axes(handles.axes1);
imshow(img);% --- Executes during object creation, after setting all properties.
function popupmenu1_CreateFcn(hObject, eventdata, handles)
% hObject    handle to popupmenu1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called% Hint: popupmenu controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end% --- Executes on button press in pushbutton_mask.
function pushbutton_mask_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton_mask (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global I1_g I2_g I1_mask I2_mask line2_thick_mask;
pic_num=get(handles.popupmenu1,'Value');
if pic_num==1I1_gray = rgb2gray(I1_g);I1_mask = get_mask_1(I1_gray, floor(509*size(I1_gray,1)/719)); elseend
function BW = imbinarize(I,varargin) %#codegen
%imbinarize Binarize image by thresholding.%   %   Syntax
%   ------
%
%       BW = imbinarize(I)
%       BW = imbinarize(I,method)
%       BW = imbinarize(I,'adaptive',Param,Value,...)
%       BW = imbinarize(I,t)
%
%   Input Specs
%   -----------
%
%      I:
%        real
%        non-sparse
%        2d
%        uint8, uint16, uint32, int8, int16, int32, single or double
%
%      method:
%        string with value: 'global' or 'adaptive'
%        default: 'global'
%
%      Sensitivity:
%        numeric
%        real
%        non-sparse
%        scalar
%        non-negative
%        <= 1
%        default: 0.5
%        converted to double
%
%      ForegroundPolarity:
%        string with value either 'bright' or 'dark'
%        default: 'bright'
%
%      t:
%        numeric
%        real
%        non-sparse
%        2d
%        either scalar or matrix of the same size as I
%
%   Output Specs
%   ------------
%
%     BW:
%       logical
%       2D matrix
%       same size as I
%% Validate the input image
validateImage(I);% Parse and validate optional inputs
[isNumericThreshold,options] = parseOptionalInputs(I,varargin{:});
coder.internal.prefer_const(isNumericThreshold,options);if isNumericThreshold% BW = imbinarize(I,t)BW = binarize(I,options.t);
elseif strcmp(options.method,'global')% BW = imbinarize(I,'global')t = computeGlobalThreshold(I);else% BW = imbinarize(I,'adaptive',...)t = adaptthresh(I,options.sensitivity,'ForegroundPolarity',options.polarity);endBW = binarize(I,t);
end

三、运行结果

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.
[5]张汝峰,项璟,陈鹏,张亚娟,张喜英,薛瑞.基于FMM算法的深度图像修复研究[J].湖北农机化. 2020,(01)
[6]齐玲,王锦.一种基于Criminisi算法改进的图像修复技术[J].软件导刊. 2019,18(04)

【图像修复】基于matlab GUI FMM+Criminisi算法彩色图像修复【含Matlab源码 1507期】相关推荐

  1. 【图像处理】基于matlab GUI多功能图像处理系统【含Matlab源码 1876期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[图像处理]基于matlab GUI多功能图像处理系统[含Matlab源码 1876期] 点击上面蓝色字体,直接付费下载,即可. 获取代码 ...

  2. 【机械仿真】基于matlab GUI曲柄摇杆机构运动仿真【含Matlab源码 1608期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[机械仿真]基于matlab GUI曲柄摇杆机构运动仿真[含Matlab源码 1608期] 点击上面蓝色字体,直接付费下载,即可. 获取代码 ...

  3. 【光学】基于matlab GUI光栅条纹投影生成【含Matlab源码 2118期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[光学]基于matlab GUI光栅条纹投影生成[含Matlab源码 2118期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2 ...

  4. 【机械仿真】基于matlab GUI直齿圆柱齿轮应力计算【含Matlab源码 2077期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[机械仿真]基于matlab GUI直齿圆柱齿轮应力计算[含Matlab源码 2077期] 点击上面蓝色字体,直接付费下载,即可. 获取代 ...

  5. 【天体学】基于matlab GUI太阳天顶角计算【含Matlab源码 2229期】

    一.⛄获取代码方式 获取代码方式1: 完整代码已上传我的资源:[天体学]基于matlab GUI太阳天顶角计算[含Matlab源码 2229期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2 ...

  6. 【优化算法】基于matlab象鼻虫损害优化算法 (WDOA)【含Matlab源码 2228期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[优化算法]基于matlab象鼻虫损害优化算法 (WDOA)[含Matlab源码 2228期] 点击上面蓝色字体,直接付费下载,即可. 获 ...

  7. 【人脸识别】基于matlab GUI KL变换人脸识别【含Matlab源码 859期】

    ⛄一.KL变换人脸识别简介 人脸识别是指基于己知的人脸样本集,利用图像处理和模式识别的技术从静态或动态场景中,识别或验证一个或多个人脸.人脸识别技术跨越了图像处理.模式识别.计算机视觉.生物学.神经生 ...

  8. 【限速标志识别】基于matlab GUI形态学限速标志识别【含Matlab源码 1142期】

    ⛄一.SVM路标检测识别简介 1 路标识别 完整的路标识别系统包括:图像的获取与预处理,图像分割(路标定位),特征提取,模式分类(路标识别)等部分.其中模式分类是系统的关键技术.较常用的模式分类方法是 ...

  9. 【身份证识别】基于matlab GUI BP神经网络身份证识别【含Matlab源码 2239期】

    ⛄一.身份证号码识别简介 1 引言 当今是一个信息高度发达的时代,对于每个公民而言身份证那一连串的数字体现了个人信息的唯一性,出于保障公民合法权益和社会治安的考虑,越来越多的行业都开始建立自己的安全保 ...

最新文章

  1. 精选26个Python实用技巧,想秀技能先Get这份技术列表!
  2. Spring4 MVC json问题(406 Not Acceptable)
  3. 让ie8、ie9支持媒体查询
  4. linux s g文本替换问题
  5. c#中设计器中窗体释放  protected override void Dispose(bool disposing)改写解决部分窗体线程释放不彻底问题
  6. 【分享】LazyLoad延迟加载(按需加载)
  7. 苹果邮箱收发件服务器
  8. Flask开发系列之初体验
  9. 设计模式之GOF23策略
  10. golang使用go-sql-driver实现mysql增删改操作
  11. linux shell 数字计算详解
  12. 12个优秀的开源UML工具
  13. iOS 地址智能解析器(收货地址 或 寄件地址)
  14. NVivo更改背景字体
  15. 求三角形外接圆 hdu4720
  16. 用matlab绘制分段函数曲线
  17. RIFE: Real-Time Intermediate Flow Estimation for Video Frame Interpolation——精读笔记
  18. Android10.0修改默认usb为MTP模式
  19. AODV协议的运行方式
  20. python主函数调用格式_Python入门基础中怎么定义函数,函数调用,函数传递参数...

热门文章

  1. python笔记(tornado初识)
  2. android adb找不到,adb找不到我的设备/手机(MacOS X)
  3. linux查看gcccmake当前版本
  4. 漫画 | 到底是什么让IT人如此苦逼???
  5. (信息物理系统)《An architectural approach to the design and analysis of cyber-physical systems》
  6. 如何下载什刹海街道卫星地图高清版大图
  7. Java反射机制的学习
  8. 智能运维案例系列 | 新网银行 X 袋鼠云:银行核心业务系统日志监控平台建设实践...
  9. 快速上手JVM系列(整合篇)
  10. js 图片放大缩小(动画效果)