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 个评论
回答(0 个)
此问题已关闭。
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!