資源簡介
用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
- 上一篇:濾波法產生單邊帶信號
- 下一篇:模式識別大作業MATLAB版)
評論
共有 條評論