Effacer les filtres
Effacer les filtres

Info

Cette question est clôturée. Rouvrir pour modifier ou répondre.

the problem with loop

2 vues (au cours des 30 derniers jours)
juveria fatima
juveria fatima le 12 Sep 2018
Clôturé : MATLAB Answer Bot le 20 Août 2021
test1 images and reference images imagedb exceeds 6 mb size so i couldn't attach the image for test you can take any images for test
the problem is am getting only surface roughness 1 is displayed
am unable to get the rest surface roughness
test1=imread('D:\HD\Images\5 0.75 30\5 0.75 30 4.bmp');
imagedb{1}=imread('D:\HD\Images\5 0.75 30\5 0.75 30 1.bmp');
imagedb{2}=imread('D:\HD\Images\5 1.25 30\5 1.25 30 1.bmp');
imagedb{3}=imread('D:\HD\Images\10 0.25 30\10 0.25 30 1.bmp');
imagedb{4}=imread('D:\HD\Images\10 0.75 30\10 0.75 30 1.bmp');
imagedb{5}=imread('D:\HD\Images\10 0.75 50\10 0.75 50 1.bmp');
imagedb{6}=imread('D:\HD\Images\15 1.25 30\15 1.25 30 1.bmp');
resizetest=imresize(test1,[256,256]);
eqtest=histeq(resizetest);
gtest=rgb2gray(eqtest);
imhist(eqtest)
%imhist()
for x=1:6
resize{x}=imresize(imagedb{x},[256,256]);
eq{x}=histeq(resize{x});
g{x}=rgb2gray(eq{x});
end
%count=0;
%rg{1}=imresize(g{1},[20 20]);
%rgtest=imresize(gtest,[20 20]);
%hamming=pdist2(rg{1},rgtest,'hamming');
%disp(hamming)
%for i=1:20
% for j=1:20
%count=hamming(j,i)+count;
% end
%end
%answer=count/400;
%disp(answer)
min=10^5;
for i=1:6
dist{i}= (1/6) * (sum((g{i} - gtest)) );
if dist{i}< min
min=dist{i};
index=i;
end
end
disp(min)
disp(index)
switch(index)
case 1
fprintf('The Surface Roughness Is 2.403\n');
case 2
fprintf('The Surface Roughness Is 3.22\n');
case 3
fprintf('The Surface Roughness Is 1.595\n');
case 4
fprintf('The Surface Roughness Is 2.236\n');
case 5
fprintf('The Surface Roughness Is 2.125\n');
case 6
fprintf('The Surface Roughness Is 1.055\n');
end
%Dist1 = (1/6)*(sum((g1(:).* g2(:) );
%Dist2 = (1/6)*(sum((g1(:).* g3(:) );
%Dist3 = (1/6)*(sum((g1(:).* g2(:) );
%disp(Dist1)
%disp(Dist2)
%disp(Dist3)
  2 commentaires
Walter Roberson
Walter Roberson le 12 Sep 2018
histeq() with one parameter is only valid for intensity (grayscale) images, and in that case returns the equalized grayscale image. You record that in eq{x}. But why do you rgb2gray() that, since you can be sure it is already gray?
juveria fatima
juveria fatima le 12 Sep 2018
yeah ok that i will change ,please help me with the loop

Réponses (1)

Walter Roberson
Walter Roberson le 12 Sep 2018
You have
dist{i}= (1/6) * (sum((g{i} - gtest)) );
where g{i} is a grayscale version of an image that was resized to 256 x 256 and then histogram equalized. Therefore g{i} will be a 2D array, 256 x 256. When you sum g{i}-gtest you are summing over the first dimension and will get a 1 x 256 result. dist{i} is therefore 1 x 256.
You then have
if dist{i}< min
min=dist{i};
index=i;
end
but remember dist{i} is a 1 x 256. When you < a 1 x 256 against a scalar, you get a 1 x 256 result. When you if a vector, the result is considered true only if all entries are non-zero, so your test is equivalent to if all(dist{i} < min) . And perhaps that only ever happens for i == 6 -- the other i values might lead to vectors in which some of the entries are less than the minimum but not all of them are.
Your code does not promise that index will be set at all. You only set index conditionally, and it could be the case that none of the conditions match.

Cette question est clôturée.

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by