• 大小: 12KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-11
  • 语言: Matlab
  • 标签: 图像修复  TV模型  

资源简介

用matlab实现的TV修复源代码,利用中心差分法进行数值计算。

资源截图

代码片段和文件信息

function [B] = newTVInpaintingTest()
clear all;
close all;
OriginalImg = rgb2gray(imread(‘clothOriginal.bmp‘));
% OriginalImg = rgb2gray(imread(‘barbOriginal.bmp‘));
% OriginalImg = rgb2gray(imread(‘斜线图Original.bmp‘));
% OriginalImg = imread(‘bookOriginal.bmp‘);
% OriginalImg = rgb2gray(imread(‘zhuobuOriginal.bmp‘));
% OriginalImg = rgb2gray(imread(‘gunOriginal.bmp‘));
% OriginalImg = rgb2gray(imread(‘集市GRAYDirty.bmp‘));
% OriginalImg = imread(‘lenaOriginal.bmp‘);
% OriginalImg =imread(‘S_S_Denimb_t.bmp‘);

% OriginalImg=imnoise(OriginalImg‘gaussian‘0.010.003);
figure(1);imshow(OriginalImg);

% imwrite(uint8(OriginalImg)‘lenaNoise.bmp‘);


% DirtyImg=rgb2gray(imread(‘clothDirtyCrossGray.bmp‘));
% DirtyImg=rgb2gray(imread(‘clothDirtyFirstGray.bmp‘));
% DirtyImg=rgb2gray(imread(‘barbDirty.bmp‘));
% DirtyImg=rgb2gray(imread(‘斜线图dirty.bmp‘));
% DirtyImg=imread(‘bookDirty.bmp‘);
% DirtyImg=rgb2gray(imread(‘zhuobuDirty.bmp‘));
% DirtyImg=rgb2gray(imread(‘gunDirty.bmp‘));
% DirtyImg=rgb2gray(imread(‘集市GRAYDirty.bmp‘));
% DirtyImg=imread(‘lenaDirty.bmp‘);
% DirtyImg=imread(‘lenaDirtyCon.bmp‘);
% DirtyImg=imread(‘S_S_Denimb_tDirty.bmp‘);
DirtyImg=imread(‘clothNoiseDirty.bmp‘);



figure(2);imshow(DirtyImg);
OriginalImg=double(OriginalImg);
DirtyImg=double(DirtyImg);
%获取图像宽度和高度
[widthheight] = size(DirtyImg);
dirtyMSE = 0.0;
 for j = 1:height
    for i = 1:width
        dirtyMSE=dirtyMSE+abs(OriginalImg(ij)-DirtyImg(ij));
    end
 end
dirtyMSE = dirtyMSE/(width*height);
dirtyPSNR = 10*log10(255*255/dirtyMSE)
% Img = double(DirtyImg);
Img=double(DirtyImg);


U = Img;
V = Img;
IterTimes=100;
% MASK = imread(‘lakeMask.bmp‘);
% [widthMheightM] = size(MASK);
% for j = 1:height
%     for i = 1:width
% %         if Img(ij) > 251
%         if Img(ij) < 1
%             MASK(ij) = 255;
%         else
%             MASK(ij) = 0;
%         end
%     end
% end

%利用逻辑运算提取掩模
% MASK=~(Img); %人为选择阈值
MASK = (Img < 1);
% MASK = (Img > 251);%lena;集市图像
figure(3);imshow(MASK);
%计算受损率
badNum=0;
for j = 1:height
    for i = 1:width
        if MASK(ij) == 1
            badNum=badNum+1;
        end
    end
end
badRatio=badNum/(width*height)

% %将二值掩模中间的空洞填充,使之成为纯粹的二值掩模
% noborder=imclearborder(MASK4);
% % figureimshow(noborder)
% MASK=imfill(noborder‘holes‘);
% figureimshow(MASK);

tic;
%%纹理方向(-2,3)即(mn)取决于坐标系的方向,无所谓
%%用自己的算法求得纹理方向为(-10,16)
%对其他图像,若纹理越界,可进行近似
m=-2;n=3;%cloth
% m=1;n=0;%tv
%  m=-4;n=1;%gun
% m=-1;n=1;
iter=1;
a=1e-6;
while iter <= IterTimes
    %更新修复区域内每点值
    for i = 8:width-8
        for j = 8:height-8
%             if (MASK(ij+1) == 255)|(MASK(ij-1) == 255)|(MASK(i+1j) == 255)|(MASK(i-1j) == 255)
%               if (MASK(ij+1) == 1)|(MASK(ij-1) == 1)|(MASK(i+1j) == 1)|(MASK(i-1j) == 1)
%                 if MASK(ij)==255
            lamda = 0.005;
            if MASK(ij) == 1
%                 if (MASK(ij+2) == 1)|(MASK(ij-2) ==

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       5229  2008-04-07 08:49  NoisenewTVInpaintingTest.m

     文件      14958  2007-08-19 09:55  clothOriginal.bmp

     文件       6046  2008-03-27 18:30  clothNoiseDirty.bmp

----------- ---------  ---------- -----  ----

                26233                    3


评论

共有 条评论