Info

此问题已关闭。 请重新打开它进行编辑或回答。

wavelet filter modifies the original image?

1 次查看(过去 30 天)
function denoisedCoefficients = computelocalvariance(subbandCoeff,noiseVariance)
windowSize = [3 5 7 9];
[nRows nCols] = size(subbandCoeff);
denoisedCoefficients = zeros(nRows,nCols);
localVarWind3 = 0;
localVarWind5 = 0;
localVarWind7 = 0;
localVarWind9 = 0;
minLocalVariance = 0;
sumVariance = 0; try iRowOutput = 5; jRowOutput = 5;
noiseVarianceSquare = noiseVariance^2;
for iRow = 1 : nRows for jCol = 1: nCols
%limited by the size of the largest windows i.e., 9 x 9 window
if (iRow+windowSize(4)<nRows) && (jCol+windowSize(4)<nCols)
%Calculating local variance with first windowSize = 3
for iWindowRow = iRow:(iRow+windowSize(1)-1) %windowsize is 3 x 3
for iWindowCol = jCol:(jCol+windowSize(1)-1)
sumVariance = sumVariance + ((subbandCoeff(iRow,jCol)^2) - noiseVarianceSquare);
end %iWindowCol
end %iWindowRow
localVarWind3 = 1/(windowSize(1)^2) * sumVariance;
localVarWind3 = max(0,localVarWind3);
%Calculating local variance with second windowSize = 5
for iWindowRow = iRow:(iRow+windowSize(2)-1)
for iWindowCol = jCol:(jCol+windowSize(2)-1)
sumVariance = sumVariance + ((subbandCoeff(iRow,jCol)^2) - noiseVarianceSquare);
end %iWindowCol
end %iWindowRow
localVarWind5 = 1/(windowSize(2)^2) * sumVariance;
localVarWind5 = max(0,localVarWind5);
%Calculating local variance with third windowSize = 7
for iWindowRow = iRow:(iRow+windowSize(3)-1)
for iWindowCol = jCol:(jCol+windowSize(3-1))
sumVariance = sumVariance + ((subbandCoeff(iRow,jCol)^2) - noiseVarianceSquare);
end %iWindowCol
end %iWindowRow
localVarWind7 = 1/(windowSize(3)^2) * sumVariance;
localVarWind7 = max(0,localVarWind7);
%Calculating local variance with fourth windowSize = 9
for iWindowRow = iRow:(iRow+windowSize(4)-1)
for iWindowCol = jCol:(jCol+windowSize(4)-1)
sumVariance = sumVariance + ((subbandCoeff(iRow,jCol)^2) - noiseVarianceSquare);
end %iWindowCol
end %iWindowRow
localVarWind9 = 1/(windowSize(4)^2) * sumVariance;
localVarWind9 = max(0,localVarWind9);
minLocalVariance = min([localVarWind3 localVarWind5 localVarWind7 localVarWind9]);
denoisedCoefficients(iRow+4,jCol+4) = subbandCoeff(iRow,jCol)*((minLocalVariance^2)/((minLocalVariance^2)+noiseVarianceSquare));
else
MatIndexExceeds = 1;
end %if (iRow+WindowSize(4)<nRows) && (jCol+WindowSize(4)<nCols)
end %for jCol
end %for iRow
% 7x7 iRow = 1; for jCol = 4:nCols
if (jCol+windowSize(3)<nCols)
%Calculating local variance with first windowSize = 3
for iWindowRow = iRow+2:(iRow+2+windowSize(1)-1) %windowsize is 3 x 3
for iWindowCol = jCol-1:(jCol-1+windowSize(1)-1)
sumVariance = sumVariance + ((subbandCoeff(iWindowRow,iWindowCol)^2) - noiseVarianceSquare);
end %iWindowCol
end %iWindowRow
localVarWind3 = 1/(windowSize(1)^2) * sumVariance;
localVarWind3 = max(0,localVarWind3);
%Calculating local variance with second windowSize = 5
for iWindowRow = iRow+1:(iRow+1+windowSize(2)-1)
for iWindowCol = jCol-2:(jCol-2+windowSize(2)-1)
sumVariance = sumVariance + ((subbandCoeff(iWindowRow,iWindowCol)^2) - noiseVarianceSquare);
end %iWindowCol
end %iWindowRow
localVarWind5 = 1/(windowSize(2)^2) * sumVariance;
localVarWind5 = max(0,localVarWind5);
%Calculating local variance with third windowSize = 7
for iWindowRow = iRow:(iRow+windowSize(3)-1)
for iWindowCol = jCol-3:(jCol-3+windowSize(3-1))
sumVariance = sumVariance + ((subbandCoeff(iWindowRow,iWindowCol)^2) - noiseVarianceSquare);
end %iWindowCol
end %iWindowRow
localVarWind7 = 1/(windowSize(3)^2) * sumVariance;
localVarWind7 = max(0,localVarWind7);
minLocalVariance = min([localVarWind3 localVarWind5 localVarWind7]);
denoisedCoefficients(4,jCol) = subbandCoeff(iRow,jCol)*((minLocalVariance^2)/((minLocalVariance^2)+noiseVarianceSquare));
end %if
end w
%Moving the windows from top to bottom jCol = 1; for iRow = 4:nRows
if (iRow+windowSize(3)<nRows)
%Calculating local variance with first windowSize = 3
for iWindowRow = iRow-1:(iRow-1+windowSize(1)-1) %windowsize is 3 x 3
for iWindowCol = jCol+2:(jCol+2+windowSize(1)-1)
sumVariance = sumVariance + ((subbandCoeff(iWindowRow,iWindowCol)^2) - noiseVarianceSquare);
end %iWindowCol
end %iWindowRow
localVarWind3 = 1/(windowSize(1)^2) * sumVariance;
localVarWind3 = max(0,localVarWind3);
%Calculating local variance with second windowSize = 5
for iWindowRow = iRow-2:(iRow-2+windowSize(2)-1)
for iWindowCol = jCol+1:(jCol+1+windowSize(2)-1)
sumVariance = sumVariance + ((subbandCoeff(iWindowRow,iWindowCol)^2) - noiseVarianceSquare);
end %iWindowCol
end %iWindowRow
localVarWind5 = 1/(windowSize(2)^2) * sumVariance;
localVarWind5 = max(0,localVarWind5);
%Calculating local variance with third windowSize = 7
for iWindowRow = iRow-3:(iRow-3+windowSize(3)-1)
for iWindowCol = jCol:(jCol+windowSize(3)-1)
sumVariance = sumVariance + ((subbandCoeff(iWindowRow,iWindowCol)^2) - noiseVarianceSquare);
end %iWindowCol
end %iWindowRow
localVarWind7 = 1/(windowSize(3)^2) * sumVariance;
localVarWind7 = max(0,localVarWind7);
end %if row boundary limiting
minLocalVariance = min([localVarWind3 localVarWind5 localVarWind7]);
denoisedCoefficients(iRow,4) = subbandCoeff(iRow,jCol)*((minLocalVariance^2)/((minLocalVariance^2)+noiseVarianceSquare));
end %for iRow, to move the windows through 4th column, from top to bottom
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5 x 5 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
iRow = 1; for jCol = 3:nCols
%Limiting by the size of the largest windows i.e., 5 x5 window
if (jCol+windowSize(2)<nCols)
%Calculating local variance with first windowSize = 3
for iWindowRow = iRow+1:(iRow+1+windowSize(1)-1) %windowsize is 3 x 3
for iWindowCol = jCol-1:(jCol-1+windowSize(1)-1)
sumVariance = sumVariance + ((subbandCoeff(iWindowRow,iWindowCol)^2) - noiseVarianceSquare);
end %iWindowCol
end %iWindowRow
localVarWind3 = 1/(windowSize(1)^2) * sumVariance;
localVarWind3 = max(0,localVarWind3);
%Calculating local variance with second windowSize = 5
for iWindowRow = iRow:(iRow+windowSize(2)-1)
for iWindowCol = jCol-2:(jCol-2+windowSize(2)-1)
sumVariance = sumVariance + ((subbandCoeff(iWindowRow,iWindowCol)^2) - noiseVarianceSquare);
end %iWindowCol
end %iWindowRow
localVarWind5 = 1/(windowSize(2)^2) * sumVariance;
localVarWind5 = max(0,localVarWind5);
minLocalVariance = min([localVarWind3 localVarWind5]);
denoisedCoefficients(3,jCol) = subbandCoeff(iRow,jCol)*((minLocalVariance^2)/((minLocalVariance^2)+noiseVarianceSquare));
end %if
end %for jCol, to move the windows through 3rd row
jCol = 1; for iRow = 3:(nRows-windowSize(2)+1)
if (jCol+windowSize(2)<nCols)
%Calculating local variance with first windowSize = 3
for iWindowRow = iRow-1:(iRow-1+windowSize(1)-1) %windowsize is 3 x 3
for iWindowCol = jCol+1:(jCol+1+windowSize(1)-1)
sumVariance = sumVariance + ((subbandCoeff(iWindowRow,iWindowCol)^2) - noiseVarianceSquare);
end %iWindowCol
end %iWindowRow
localVarWind3 = 1/(windowSize(1)^2) * sumVariance;
localVarWind3 = max(0,localVarWind3);
%Calculating local variance with second windowSize = 5
for iWindowRow = iRow-2:(iRow-2+windowSize(2)-1)
for iWindowCol = jCol:(jCol+windowSize(2)-1)
if (iWindowRow>45)
err =1;
end
sumVariance = sumVariance + ((subbandCoeff(iWindowRow,iWindowCol)^2) - noiseVarianceSquare);
end %iWindowCol
end %iWindowRow
localVarWind5 = 1/(windowSize(2)^2) * sumVariance;
localVarWind5 = max(0,localVarWind5);
minLocalVariance = min([localVarWind3 localVarWind5]);
denoisedCoefficients(iRow,3) = subbandCoeff(iRow,jCol)*((minLocalVariance^2)/((minLocalVariance^2)+noiseVarianceSquare));
end %if
end %for jCol, to move the windows through 3rd col
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%3 x 3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %Performing the operations for 3 x 3 window
iRow = 1; for jCol = 2:nCols
if (jCol+windowSize(1)<nCols)
%Calculating local variance with first windowSize = 3
for iWindowRow = iRow:(iRow+windowSize(1)-1) %windowsize is 3 x 3
for iWindowCol = jCol-1:(jCol-1+windowSize(1)-1)
sumVariance = sumVariance + ((subbandCoeff(iWindowRow,iWindowCol)^2) - noiseVarianceSquare);
end %iWindowCol
end %iWindowRow
localVarWind3 = 1/(windowSize(1)^2) * sumVariance;
localVarWind3 = max(0,localVarWind3);
minLocalVariance = localVarWind3;
denoisedCoefficients(2,jCol) = subbandCoeff(iRow,jCol)*((minLocalVariance^2)/((minLocalVariance^2)+noiseVarianceSquare));
end %if
end %for jCol, to move the windows through 3rd row
%Performing the operations for 3 x 3 window %Moving the windows from top to bottom jCol = 1; for iRow =2:nRows-windowSize(1)+1
%Limiting by the size of the largest windows i.e., 3 x3 window
if (jCol+windowSize(2)<nCols)
%Calculating local variance with first windowSize = 3
for iWindowRow = iRow-1:(iRow-1+windowSize(1)-1) %windowsize is 3 x 3
for iWindowCol = jCol:(jCol+windowSize(1)-1)
sumVariance = sumVariance + ((subbandCoeff(iWindowRow,iWindowCol)^2) - noiseVarianceSquare);
end %iWindowCol
end %iWindowRow
localVarWind3 = 1/(windowSize(1)^2) * sumVariance;
localVarWind3 = max(0,localVarWind3);
minLocalVariance = localVarWind3;
denoisedCoefficients(iRow,2) = subbandCoeff(iRow,jCol)*((minLocalVariance^2)/((minLocalVariance^2)+noiseVarianceSquare));
end %if
end %******************7 x 7 ********************************************** %Moving the windows from left to right near the bottom boundary iRow =nRows-7+1; %To fit the 7 x 7 window for jCol = 1:nCols
if (jCol+windowSize(3)<nCols)
%Calculating local variance with first windowSize = 3
for iWindowRow = iRow:(iRow+windowSize(1)-1) %windowsize is 3 x 3
for iWindowCol = jCol:(jCol+windowSize(1)-1)
if (iWindowRow>45)
err =1;
else if (iWindowCol>45)
err = 2;
end
end
sumVariance = sumVariance + ((subbandCoeff(iWindowRow,iWindowCol)^2) - noiseVarianceSquare);
end %iWindowCol
end %iWindowRow
localVarWind3 = 1/(windowSize(1)^2) * sumVariance;
localVarWind3 = max(0,localVarWind3);
%Calculating local variance with second windowSize = 5
for iWindowRow = iRow+1:(iRow+1+windowSize(2)-1)
for iWindowCol = jCol+1:(jCol-2+windowSize(2)-1)
if (iWindowRow>45)
err =1;
else if (iWindowCol>45)
err = 2;
end
end
sumVariance = sumVariance + ((subbandCoeff(iWindowRow,iWindowCol)^2) - noiseVarianceSquare);
end %iWindowCol
end %iWindowRow
localVarWind5 = 1/(windowSize(2)^2) * sumVariance;
localVarWind5 = max(0,localVarWind5);
%Calculating local variance with third windowSize = 7
for iWindowRow = iRow:(iRow+windowSize(3)-1)
for iWindowCol = jCol:(jCol-3+windowSize(3-1))
if (iWindowRow>45)
err =1;
else if (iWindowCol>45)
err = 2;
end
end
sumVariance = sumVariance + ((subbandCoeff(iWindowRow,iWindowCol)^2) - noiseVarianceSquare);
end %iWindowCol
end %iWindowRow
localVarWind7 = 1/(windowSize(3)^2) * sumVariance;
localVarWind7 = max(0,localVarWind7);
minLocalVariance = min([localVarWind3 localVarWind5 localVarWind7]);
denoisedCoefficients(4,jCol) = subbandCoeff(iRow,jCol)*((minLocalVariance^2)/((minLocalVariance^2)+noiseVarianceSquare));
end %if
end %for jCol, to move the windows through 4th row
%Moving the windows from top to bottom jCol = 1; for iRow = 4:nRows
if (iRow+windowSize(3)<nRows)
%Calculating local variance with first windowSize = 3
for iWindowRow = iRow-1:(iRow-1+windowSize(1)-1) %windowsize is 3 x 3
for iWindowCol = jCol+2:(jCol+2+windowSize(1)-1)
if (iWindowRow>45)
err =1;
else if (iWindowCol>45)
err = 2;
end
end
sumVariance = sumVariance + ((subbandCoeff(iWindowRow,iWindowCol)^2) - noiseVarianceSquare);
end %iWindowCol
end %iWindowRow
localVarWind3 = 1/(windowSize(1)^2) * sumVariance;
localVarWind3 = max(0,localVarWind3);
%Calculating local variance with second windowSize = 5
for iWindowRow = iRow-2:(iRow-2+windowSize(2)-1)
for iWindowCol = jCol+1:(jCol+1+windowSize(2)-1)
if (iWindowRow>45)
err =1;
else if (iWindowCol>45)
err = 2;
end
end
sumVariance = sumVariance + ((subbandCoeff(iWindowRow,iWindowCol)^2) - noiseVarianceSquare);
end %iWindowCol
end %iWindowRow
localVarWind5 = 1/(windowSize(2)^2) * sumVariance;
localVarWind5 = max(0,localVarWind5);
%Calculating local variance with third windowSize = 7
for iWindowRow = iRow-3:(iRow-3+windowSize(3)-1)
for iWindowCol = jCol:(jCol+windowSize(3-1))
if (iWindowRow>45)
err =1;
else if (iWindowCol>45)
err = 2;
end
end
sumVariance = sumVariance + ((subbandCoeff(iWindowRow,iWindowCol)^2) - noiseVarianceSquare);
end %iWindowCol
end %iWindowRow
localVarWind7 = 1/(windowSize(3)^2) * sumVariance;
localVarWind7 = max(0,localVarWind7);
end %if row boundary limiting
minLocalVariance = min([localVarWind3 localVarWind5 localVarWind7]);
denoisedCoefficients(iRow,nCols-3) = subbandCoeff(iRow,jCol)*((minLocalVariance^2)/((minLocalVariance^2)+noiseVarianceSquare));%nCol-3 is the central pixel for 7x7 window
end %for iRow, to move the windows through 4th column, from top to bottom
%******************5 x 5 **********************************************
%Moving the windows from left to right near the bottom boundary iRow =nRows-5+1; for jCol = 1:nCols
if (jCol+windowSize(2)<nCols)
%Calculating local variance with first windowSize = 3
for iWindowRow = iRow:(iRow+windowSize(1)-1) %windowsize is 3 x 3
for iWindowCol = jCol:(jCol+windowSize(1)-1)
if (iWindowRow>45)
err =1;
else if (iWindowCol>45)
err = 2;
end
end
sumVariance = sumVariance + ((subbandCoeff(iWindowRow,iWindowCol)^2) - noiseVarianceSquare);
end %iWindowCol
end %iWindowRow
localVarWind3 = 1/(windowSize(1)^2) * sumVariance;
localVarWind3 = max(0,localVarWind3);
%Calculating local variance with second windowSize = 5
for iWindowRow = iRow+1:(iRow+windowSize(2)-1)
for iWindowCol = jCol+1:(jCol-2+windowSize(2)-1)
if (iWindowRow>45)
err =1;
else if (iWindowCol>45)
err = 2;
end
end
sumVariance = sumVariance + ((subbandCoeff(iWindowRow,iWindowCol)^2) - noiseVarianceSquare);
end %iWindowCol
end %iWindowRow
localVarWind5 = 1/(windowSize(2)^2) * sumVariance;
localVarWind5 = max(0,localVarWind5);
minLocalVariance = min([localVarWind3 localVarWind5]);
denoisedCoefficients(iRow,jCol) = subbandCoeff(iRow,jCol)*((minLocalVariance^2)/((minLocalVariance^2)+noiseVarianceSquare));
end %if
end %for jCol, to move the windows through 4th row
%Moving the windows from top to bottom jCol = 1; for iRow = 3:nRows
if (iRow+windowSize(3)<nRows)
%Calculating local variance with first windowSize = 3
for iWindowRow = iRow-1:(iRow-1+windowSize(1)-1) %windowsize is 3 x 3
for iWindowCol = jCol+2:(jCol+2+windowSize(1)-1)
if (iWindowRow>45)
err =1;
else if (iWindowCol>45)
err = 2;
end
end
sumVariance = sumVariance + ((subbandCoeff(iWindowRow,iWindowCol)^2) - noiseVarianceSquare);
end %iWindowCol
end %iWindowRow
localVarWind3 = 1/(windowSize(1)^2) * sumVariance;
localVarWind3 = max(0,localVarWind3);
%Calculating local variance with second windowSize = 5
for iWindowRow = iRow-2:(iRow-2+windowSize(2)-1)
for iWindowCol = jCol+1:(jCol+1+windowSize(2)-1)
if (iWindowRow>45)
err =1;
else if (iWindowCol>45)
err = 2;
end
end
sumVariance = sumVariance + ((subbandCoeff(iWindowRow,iWindowCol)^2) - noiseVarianceSquare);
end %iWindowCol
end %iWindowRow
localVarWind5 = 1/(windowSize(2)^2) * sumVariance;
localVarWind5 = max(0,localVarWind5);
end %if row boundary limiting
minLocalVariance = min([localVarWind3 localVarWind5]);
denoisedCoefficients(iRow,nCols-3) = subbandCoeff(iRow,jCol)*((minLocalVariance^2)/((minLocalVariance^2)+noiseVarianceSquare));%nCol-3 is the central pixel for 7x7 window
end %for iRow, to move the windows through 4th column, from top to bottom
%******************3 x 3 ********************************************** %Moving the windows from left to right near the bottom boundary iRow =nRows-3+1; %To fit the 3 x 3 window for jCol = 1:nCols
if (jCol+windowSize(2)<nCols)
%Calculating local variance with first windowSize = 3
for iWindowRow = iRow:(iRow+windowSize(1)-1) %windowsize is 3 x 3
for iWindowCol = jCol:(jCol+windowSize(1)-1)
if (iWindowRow>45)
err =1;
else if (iWindowCol>45)
err = 2;
end
end
sumVariance = sumVariance + ((subbandCoeff(iWindowRow,iWindowCol)^2) - noiseVarianceSquare);
end %iWindowCol
end %iWindowRow
localVarWind3 = 1/(windowSize(1)^2) * sumVariance;
localVarWind3 = max(0,localVarWind3);
minLocalVariance = localVarWind3;
denoisedCoefficients(iRow,jCol) = subbandCoeff(iRow,jCol)*((minLocalVariance^2)/((minLocalVariance^2)+noiseVarianceSquare));
end %if
end %for jCol, to move the windows through 4th row
%Moving the windows from top to bottom jCol = 1; for iRow = 3:nRows
if (iRow+windowSize(3)<nRows)
%Calculating local variance with first windowSize = 3
for iWindowRow = iRow-1:(iRow-1+windowSize(1)-1) %windowsize is 3 x 3
for iWindowCol = jCol+2:(jCol+2+windowSize(1)-1)
if (iWindowRow>45)
err =1;
else if (iWindowCol>45)
err = 2;
end
end
sumVariance = sumVariance + ((subbandCoeff(iWindowRow,iWindowCol)^2) - noiseVarianceSquare);
end %iWindowCol
end %iWindowRow
localVarWind3 = 1/(windowSize(1)^2) * sumVariance;
localVarWind3 = max(0,localVarWind3);
end %if row boundary limiting
minLocalVariance = localVarWind3;
denoisedCoefficients(iRow,nCols-3) = subbandCoeff(iRow,jCol)*((minLocalVariance^2)/((minLocalVariance^2)+noiseVarianceSquare));%nCol-3 is the central pixel for 7x7 window
end %for iRow, to move the windows through 4th column, from top to bottom
for iRow = 1: nRows denoisedCoefficients(iRow,1) = denoisedCoefficients(iRow, 2); %copying values from 2nd column to first column denoisedCoefficients(iRow,nCols) = denoisedCoefficients(iRow, nCols-1);%copying values from n-1th column to nth column end for jCol = 1: nCols denoisedCoefficients(1,jCol) = denoisedCoefficients(2, jCol);%Copying values from 2nd row to first row. denoisedCoefficients(nRows,jCol) = denoisedCoefficients(nRows-1,jCol);%Copying values from n-1th row to nth row. end catch ex exception=1; end
Hi I am Trying to get denoised image..Step are as below---
1 EXTRACTPRNU(I )
2 Apply a wavelet decomposition in 4 levels to I
3 foreach wavelet decomposition level do 4 foreach component c ∈ {H, V, D} do
5 Compute the local variance;
6 Compute noiseless wavelet components applying the Wiener filter to the variance; 7 Obtain I clean by applying the inverse wavelet transform with clean components calculated;
But Denoised image is altered
dimension is getting changed.Please help enter image description here

回答(0 个)

此问题已关闭。

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by