How to stock a previously calculated variables so I can reuse them to draw a curve?
1 view (last 30 days)
Show older comments
Here is my code :
clc;
close all;
%Read color image and convert it to gray level image
%Display the original image
imagefiles = dir('*.jpg');
nfiles = length(imagefiles); % Number of image files found
for ii=1:nfiles
currentfilename = imagefiles(ii).name;
I = imread(currentfilename);
myimage = rgb2gray(I);
subplot(2,2,1);
imshow(myimage);title('Original Image');
treshold = [0.08] ;
sigma = 1;
%Apply Sobel Operator
%Display both Edges
sobel = edge(myimage,'sobel',treshold,'both');
subplot(2,2,2);
imshow(sobel,[]);title('Sobel');
%Apply Canny Operator
cannyedge = edge(myimage,'Canny',treshold,sigma);
subplot(2,2,3);
imshow(cannyedge,[]);title('Canny edge');
%Calcul du PSNR
A = im2double(myimage);
B = im2double(sobel);
C = im2double(cannyedge);
error_diff = A - B;
PSNRsobel = 20*log10(1/(sqrt(mean(mean(error_diff.^2)))));
fprintf('PSNRsobel = +%5.2f dB\n',PSNRsobel);
error_diff = A - C;
PSNRcanny = 20*log10(1/(sqrt(mean(mean(error_diff.^2)))));
fprintf('PSNRcanny = +%5.2f dB\n',PSNRcanny);
figure;
x = [];
y = [];
for i = 1:nfiles
x = [x,PSNRsobel];
y = [y,PSNRcanny];
y1 = linspace(0,1,nfiles);
plot(y1(i),x(i),y1(i),y(i));
end
%Calcul du SSIM
[ssimsobel] = ssim(A,B);
fprintf('The SSIM sobel value is %0.4f.\n',ssimsobel);
[ssimcanny] = ssim(A,C);
fprintf('The SSIM Canny value is %0.4f.\n',ssimcanny);
figure;
Y1 = [];
Y2 = [];
for i = 1 : nfiles
X = linspace(0,1,nfiles);
Y1 = [Y1,ssimsobel;
Y2 = [Y2,ssimcanny];
plot(X(i),Y1(i),X(i),Y2(i));
end
end
I want to get the values of PSNRsobel and PSNRcanny of all images in one array and then plot them and the same thing with the values of ssimsobel and ssimcanny. Please can someone help me out?
0 Comments
Accepted Answer
Stephan
on 2 Nov 2018
Edited: Stephan
on 2 Nov 2018
Hi,
this should do the job:
%Read color image and convert it to gray level image
%Display the original image
imagefiles = dir('*.jpg');
nfiles = length(imagefiles); % Number of image files found
stored_values = zeros(nfiles,4); % Preallocate the array for saving the values
for ii=1:nfiles
currentfilename = imagefiles(ii).name;
I = imread(currentfilename);
myimage = rgb2gray(I);
subplot(2,2,1);
imshow(myimage);title('Original Image');
treshold = 0.08;
sigma = 1;
%Apply Sobel Operator
%Display both Edges
sobel = edge(myimage,'sobel',treshold,'both');
subplot(2,2,2);
imshow(sobel,[]);title('Sobel');
%Apply Canny Operator
cannyedge = edge(myimage,'Canny',treshold,sigma);
subplot(2,2,3);
imshow(cannyedge,[]);title('Canny edge');
%Calcul du PSNR
A = im2double(myimage);
B = im2double(sobel);
C = im2double(cannyedge);
error_diff = A - B;
PSNRsobel = 20*log10(1/(sqrt(mean(mean(error_diff.^2)))));
fprintf('PSNRsobel = +%5.2f dB\n',PSNRsobel);
error_diff = A - C;
PSNRcanny = 20*log10(1/(sqrt(mean(mean(error_diff.^2)))));
fprintf('PSNRcanny = +%5.2f dB\n',PSNRcanny);
stored_values(ii,1) = PSNRsobel; % All PSNRsobel values in 1. column
stored_values(ii,2) = PSNRcanny; % All PSNRcanny values in 2. column
%Calcul du SSIM
ssimsobel = ssim(A,B);
fprintf('The SSIM sobel value is %0.4f.\n',ssimsobel);
ssimcanny = ssim(A,C);
fprintf('The SSIM Canny value is %0.4f.\n',ssimcanny);
stored_values(ii,3) = ssimsobel; % All ssimsobel values in 3. column
stored_values(ii,4) = ssimcanny; % All ssimcanny values in 4. column
end
stored_values is an array of size [number files x 4]. For every Picture there is a new row, corresponding to the filenumber in imagefiles. The 4 columns in each row save the values for every file. Then you can plot the values with:
% Plot PSNRsobel and PSNRcanny
figure(1)
plot(1:nfiles, stored_values(:,1),1:nfiles,stored_values(:,2))
% Plot ssimsobel and ssimcanny
figure(2)
plot(1:nfiles, stored_values(:,3),1:nfiles,stored_values(:,4))
Best regards
Stephan
11 Comments
Stephan
on 2 Nov 2018
Try:
%Read color image and convert it to gray level image
%Display the original image
imagefiles = dir('*.jpg');
nfiles = length(imagefiles); % Number of image files found
stored_values = zeros(nfiles,4); % Preallocate the array for saving the values
for ii=1:nfiles
currentfilename = imagefiles(ii).name;
I = imread(currentfilename);
myimage = rgb2gray(I);
figure(ii)
subplot(2,2,1);
imshow(myimage);title('Original Image');
treshold = 0.08;
sigma = 1;
%Apply Sobel Operator
%Display both Edges
sobel = edge(myimage,'sobel',treshold,'both');
subplot(2,2,2);
imshow(sobel,[]);title('Sobel');
%Apply Canny Operator
cannyedge = edge(myimage,'Canny',treshold,sigma);
subplot(2,2,3);
imshow(cannyedge,[]);title('Canny edge');
%Calcul du PSNR
A = im2double(myimage);
B = im2double(sobel);
C = im2double(cannyedge);
error_diff = A - B;
PSNRsobel = 20*log10(1/(sqrt(mean(mean(error_diff.^2)))));
fprintf('PSNRsobel = +%5.2f dB\n',PSNRsobel);
error_diff = A - C;
PSNRcanny = 20*log10(1/(sqrt(mean(mean(error_diff.^2)))));
fprintf('PSNRcanny = +%5.2f dB\n',PSNRcanny);
stored_values(ii,1) = PSNRsobel; % All PSNRsobel values in 1. column
stored_values(ii,2) = PSNRcanny; % All PSNRcanny values in 2. column
%Calcul du SSIM
ssimsobel = ssim(A,B);
fprintf('The SSIM sobel value is %0.4f.\n',ssimsobel);
ssimcanny = ssim(A,C);
fprintf('The SSIM Canny value is %0.4f.\n',ssimcanny);
stored_values(ii,3) = ssimsobel; % All ssimsobel values in 3. column
stored_values(ii,4) = ssimcanny; % All ssimcanny values in 4. column
end
% Plot PSNRsobel and PSNRcanny
figure(nfiles+1)
plot(1:nfiles, stored_values(:,1) ,1:nfiles,stored_values(:,2))
% Plot ssimsobel and ssimcanny
figure(nfiles+2)
plot(1:nfiles, stored_values(:,3), 1:nfiles,stored_values(:,4))
I think we got it now.
More Answers (0)
See Also
Categories
Find more on Image Segmentation and Analysis in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!