How to apply SVD to dwt subband

1 次查看(过去 30 天)
Hi everyone. I am new user to matlab. I found this code from internet, but i cant run the code due some error. The first error encountered was;
Error in SVD_C (line 8) %ERROR [Uh,Sh,Vh]= svd(double(hostimage)); %ERROR
can anyone please debug this code? Thank you
________________________________________________________________
function []= SVD_C() hostimage= imread('lena.bmp'); k=10; % determine size of host image Mc=size(hostimage,1); %Height Nc=size(hostimage,2); %Width
[Uh,Sh,Vh]= svd(double(hostimage));
VhT=transpose(Vh(1:Nc,1:k)); compressed_image= Uh(1:Mc,1:k)*Sh(1:k,1:k)*VhT;
%PSNR
[PSNR_SVD,MSE_SVD]= psnr(hostimage,compressed_image)
imwrite(compressed_image,'lena_svd.jpg','jpg');
figure(1) imshow(hostimage,[]); title('Host Image'); figure(2) imshow(compressed_image,[]) title('Compressed Image');
end
% Function to calculate psnr used above function [p mse]= psnr(original,reconstructed)
Mc= size(original,1); Nc= size(original,2); a1= original(1:Mc,1:Nc); a2= reconstructed(1:Mc,1:Nc);
error=double(a1)-double(a2);
sum=0; for (i=1:Mc) for(j=1:Nc) sum = sum + ((error(i,j))^2); end end
mse = sum/(Mc*Nc); p = 10*log(double((255*255)/mse));
end

采纳的回答

Image Analyst
Image Analyst 2017-3-19
Two bad things I see right off the bat. You used error and sum as the names for your variables. DON'T DO THAT!!! Those are the names of very important built in functions that you will destroy if you use them.
Why do you have your own psnr function when there is a built in psnr() function? And why, in that function, do you calculate mse when there is a built in function immse()? And why do you compute the MSE (Mean Square Error) but call it SVD (singular value decomposition)?
When I ran your code with a standard demo image:
hostimage= imread('cameraman.tif');
it ran with no errors. I don't know if it did what you want, but at least it ran and finished with no errors.
Finally why did you not give us the entire error message instead of just a snippet from it, omitting the actual error itself???
You aren't putting a color image in for hostimage, are you? I'd bet that you are. Replace your function with this version:
function SVD_C()
hostimage = imread('peppers.png');
% Get the dimensions of the image.
% numberOfColorChannels should be = 1 for a gray scale image, and 3 for an RGB color image.
[rows, columns, numberOfColorChannels] = size(hostimage);
if numberOfColorChannels > 1
% It's not really gray scale like we expected - it's color.
% Use weighted sum of ALL channels to create a gray scale image.
hostimage = rgb2gray(hostimage);
end
k = 10;
[Uh, Sh, Vh] = svd(double(hostimage));
VhT = transpose(Vh(1:columns, 1:k));
compressed_image = Uh(1:rows, 1:k) * Sh(1:k, 1:k) * VhT;
% PSNR
[PSNR_SVD, MSE_SVD] = psnr(hostimage, compressed_image)
% Save to disk.
imwrite(compressed_image, 'lena_svd.jpg');
% Display the images.
subplot(1, 2, 1);
imshow(hostimage, []);
title('Host Image', 'FontSize', 20);
subplot(1, 2, 2);
imshow(compressed_image, [])
title('Compressed Image', 'FontSize', 20);
end
  5 个评论
Afeza Ajirah
Afeza Ajirah 2017-7-5
Hello sir/Dr how to generate fitness function using both PSNR and NCC parameter? The aim is to find the most optimize or best solution for my image watermarking scaling factor (using genetic algorithm).

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Computer Vision with Simulink 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by