图像修复模型——TV模型

1. 参考文献

2. TV图像修复模型

2.1 TV模型

% demo_TV.m
% Author: HSW
% Date: 2015/3/25
% 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; 
    nImg = Img + sigma*randn(size(Img)); 
else
    nImg = Img; 
end 
nImg = (1-Mask).*nImg;
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 Total Variable Model
IterNum = 300;
lambda = 0.001; 
if FlagNoise == 1
    lambda = 1; 
end 
I = InImg;
for iter = 1:IterNum
    I = TV_inpaint_gray_color(I,Mask,lambda,FlagNoise);
    if mod(iter,100) == 0
        figure;
        imshow(I/255,[]);
        title(['Results of iterNum 
  • 7
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值