Info

이 질문은 마감되었습니다. 편집하거나 답변을 올리려면 질문을 다시 여십시오.

The program is not working in the same way for all images...(

조회 수: 2 (최근 30일)
Pramod Bhat
Pramod Bhat 2011년 3월 20일
마감: MATLAB Answer Bot 2021년 8월 20일
hi. I am doing a project on matlab.steps are' 1. Two images are given. they are A and B. 2. It needs dividing the given images to 4 blocks 3. Comparing the different blocks of A and B. i hav written the following program for that. but they are not working in the same way for all the images. And dividing in to blocks is also different in different case. wats the proble, ?
function crop_to_blocks
a=imread('img1.tif'); a=imcrop(a,[0 0 800 800]); [r,c]=size(a); if (rem(r,2)==0) && (rem(c,2)==0);
block11=imcrop(a,[0 0 r/2 c/2]);
block12=imcrop(a,[0 c/2 r/2 c/2]);
block13=imcrop(a,[r/2 0 r/2 c/2]);
block14=imcrop(a,[r/2 c/2 r/2 c/2]);
subplot(2,2,1);imshow(block11);subplot(222);imshow(block13);subplot(223);imshow(block12);subplot(224);imshow(block14);
figure,imshow(a);
else
croped=imcrop(a,[0 0 r-1 c-1]);
[r,c]=size(croped);
block11=imcrop(a,[0 0 r/2 c/2]);
block12=imcrop(a,[0 c/2 r/2 c/2]);
block13=imcrop(a,[r/2 0 r/2 c/2]);
block14=imcrop(a,[r/2 c/2 r/2 c/2]);
subplot(2,2,1);imshow(block11);subplot(222);imshow(block13);subplot(223);imshow(block12);subplot(224);imshow(block14);
end b=imread('img3.tif'); b=imcrop(b,[0 0 800 800]); a=b; [r,c]=size(a); if (rem(r,2)==0) && (rem(c,2)==0);
block21=imcrop(a,[0 0 r/2 c/2]);
block22=imcrop(a,[0 c/2 r/2 c/2]);
block23=imcrop(a,[r/2 0 r/2 c/2]);
block24=imcrop(a,[r/2 c/2 r/2 c/2]);
subplot(2,2,1);imshow(block21);subplot(222);imshow(block23);subplot(223);imshow(block22);subplot(224);imshow(block24);
%figure,imshow(a);
else
croped=imcrop(a,[0 0 r-1 c-1]);
[r,c]=size(croped);
block21=imcrop(a,[0 0 r/2 c/2]);
block22=imcrop(a,[0 c/2 r/2 c/2]);
block23=imcrop(a,[r/2 0 r/2 c/2]);
block24=imcrop(a,[r/2 c/2 r/2 c/2]);
subplot(2,2,1);imshow(block21);subplot(222);imshow(block23);subplot(223);imshow(block22);subplot(224);imshow(block24);
end
if (block11==block21)
if (block12==block22)
if (block13==23)
if (block14==block24);
end
end
end
disp('NO_DIFFERENCE');
else
disp('NOT_MATCHED');
end
end

답변 (1개)

Walter Roberson
Walter Roberson 2011년 3월 20일
You need to describe the difference between what you expect to see and what you actually see. If you are getting error messages, post copies of them and the sizes of all of the relevant variables. If your results do not match what you expect, then upload your images and your results and a drawing of what you do expect to an image-sharing site and post the links.
  댓글 수: 1
Walter Roberson
Walter Roberson 2011년 3월 21일
Emailing me another copy of the program does not help: I can read the source here. Making copies of the images available would help.
I suspect that your problem is that one of your images is an indexed or grayscale image, and that the other image is an RGB (truecolor) image. When you take the size() of a 3 dimensional matrix and try to return the value in to just two variables (because you are expecting only rows and columns), the last output variable gets assigned a value which is the product of the sizes of all the remaining dimensions.

이 질문은 마감되었습니다.

Community Treasure Hunt

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

Start Hunting!

Translated by