图像修复序列——TV_Heat模型

本文介绍了图像修复的一种序列方法——TV_Heat模型,详细讨论了模型的构成,包括p * TV模型和(1 - p) * Heat模型的结合,并探讨了TV_Heat模型的实现过程和交互式掩模选择的重要性,展示了模型的实际修复效果。
摘要由CSDN通过智能技术生成

1. 参考文献

p * TV 模型 + (1 - p)* Heat 模型

2. TV_Heat 模型

2.1 TV_Heat 模型

% demo_TV_Heat.m
% Author: HSW
% Date: 2015/3/27
% HARBIN INSTITUTE OF TECHNOLOGY
%
% set matlab
close all;
clear all;
clc;

options.null = 0;
% read image
Img = imread('Image\butterfly.bmp');
% Img = imread('Image\peppers.bmp');
% Img = rgb2gray(Img);
Img = im2double(Img);
if max(Img(:)) < 2
    Img = Img*255;
end

FlagColor = (size(Img,3) == 3);

% set mask
SetMask = 2;
if SetMask == 1
    % read mask
    Mask = imread('Mask\peppers_mask512.bmp');
    Mask = Mask > 5;
    MFlagColor = (size(Mask,3) == 3);
    if MFlagColor ~= FlagColor && FlagColor == 1
        Mask = repmat(Mask,[1,1,3]);
    elseif MFlagColor ~= FlagColor && FlagColor == 0
        Mask = Mask(:,:,1);
    end
elseif SetMask == 2
    % Interactively set mask
    if not(exist('grab_mode'))
        grab_mode = 'line';
    end
    options.grab_mode = grab_mode;
    if not(exist('grab_radius'))
        grab_radius = 4;
    end
    switch grab_mode
        case 'points'
            options.r = grab_radius;
            U = grab_inpainting_mask(Img,options);
        case 'line'
            options.r = grab_radius;
            [U,options.point_list] = grab_inpainting_mask(Img,options);
    end %switch
    Iin = find(U(:,:,1) == Inf);
    Iout = find(U(:,:,1) ~= Inf);
    m1 = length(Iin); % 缺损点的总数
    % product the mask
    Mask = zeros(size(Img));
    if FlagColor == 1
        tmpMask = zeros([size(Img,1),size(Img,2)]);
        for channel = 1:3
            tmpMask(Iin) = 1 ;
            Mask(:,:,channel) = tmpMask;
        end
    else
        Mask(Iin) = 1; % 缺损区域为1
    end % if FlagColor
end% if SetMask
FlagNoise = 0; % default noiseless
if FlagNoise == 1
    sigma = 25; 
    NoiseImg = Img + sigma*randn(size(Img)); 
    nImg = (1-Mask).*NoiseImg;
else
    nImg = (1-Mask).*Img; 
end 

PSNRin = 10*log10(255^2/mean((Img(:)-nImg(:)).^2));
InImg = nImg;
% Initial Image
if FlagColor == 1
    Positions = find(Mask(:,:,1) == 1);
    for channel = 1:3
        tmpnImg = nImg(:,:,channel);
        tmpnImg(Positions) = floor(255*rand(1,length(Positions))) + 1;
        InImg(:,:,channel) = tmpnImg;
    end
else
    Positions = find(Mask == 1);
    randValue = floor(255*rand(1,length(Positions))) + 1;
    InImg(Positions) = randValue;
end

% Main P_Harmnic Model
IterNum = 100;
lambda = 0.001; 
tuo = 0.5; 
if FlagNoise == 1
    lambda = 25; 
    tuo = 0.95; 
end 
I = InImg;
for iter = 1:IterNum
    I = TV_Heat_Harmnic_inpaint_gray_color(I,Mask,lambda,tuo,FlagNoise);
    if mod(iter,50) == 0
       
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值