Comparing 2 images intensities

down votefavorite
I have two images 1 and 2. I want to get the v (intensity) value of the hsv images; then I want the v (intensity) value of the first image equal to v (intesity) value of the second image?
I used this code to get the v;
v = image1(:, :, 3);
u = image2(:, :, 3);
How do I make both u and v the same value?
Thanks

답변 (2개)

Jeff E
Jeff E 2014년 2월 6일

1 개 추천

The code below will take the hue and saturation values from image1, and the value from image2, and merge them into one new image. Said another way, you are replacing the V signal from image1 with the V signal from image2.
new_image1 = cat(3, image1(:,:,1) , image1(:,:,2), image2(:,:,3));
Your last question "How do I make both u and v the same value?" doesn't make sense, to me.

댓글 수: 1

Ramo
Ramo 2014년 2월 8일
Its because i had two images of the same scene that are taken at different times, therefore the two images will have different intensities. So now i want to equalise their intesities so they look the same.

댓글을 달려면 로그인하십시오.

Image Analyst
Image Analyst 2014년 2월 8일

1 개 추천

Try something like this:
hsv1 = rgb2hsv(rgbImage1); % Convert to hsv color space.
hsv2 = rgb2hsv(rgbImage2); % Convert to hsv color space.
hsvOut = hsv1; % Initialize output array.
hsvOut(:,:,3) = hsv2(:,:,3); % Replace intensity of 1 with 2
rgbOut = rgb2hsv(hsvOut); % convert back to rgb color space.

댓글 수: 7

Ramo
Ramo 2014년 2월 9일
편집: Ramo 2014년 2월 9일
I have tried this:
V1 = rgb2hsv(image1);
V2 = rgb2hsv(image2);
v1 = V1(:, :, 3);
v2 = V1(:, :, 3);
hsvOut = 0.5*(v1+ v2);
imshow(hsvOut)
%It wont convert back to rgb ?
rgbOut = hsv2rgb(hsvOut);
figure; imshow(rgbOut)
Thanks,
Image Analyst
Image Analyst 2014년 2월 9일
Yeah, of course that won't work because hsvOut is not a 3D image. Plus v1 and v2 are both the same thing: the v channel of V1. Why did you not want to do what I suggested? Try it like I said instead.
Your way doesnt work too!?
what about something like that:
y = rgb2hsv(base);
x = rgb2hsv(unregistered);
v1 = y(:,:,3);
v2 = x(:,:,3);
v3 = zeros(size(v1));
g = size(v1);
x_axis = g(1);
y_axis = g(2);
for i = 1:x_axis,
for j = 1:y_axis,
v3(j) =0.5*( v1(j)+ v2(j));
end
end
%to put the calculated value into the other matrix
for k = 1:x_axis,
for l = 1:y_axis,
v1(l) = v3(j);
end
end
%putting the images together
final = zeros(x_axis, y_axis,3);
final(:,:,1) = y(:,:,1);
final(:,:,2) = y(:,:,2);
final(:,:,3) = v1;
%converting back to rgb
final1 = hsv2rgb(final);
figure; imshow(final1)
Thanks,
You say
v3(j) =0.5*( v1(j)+ v2(j));
so you're not replacing 1 with 2, you're replacing 1 with the average of image 1 and 2, which is not what you originally asked, though it may be what you want.
Ramo
Ramo 2014년 2월 13일
Thats true, because if the difference between the two intensities of the images are big then working the average would give you a better result (less noise too)- that's what I thought. However I wouldn't mind using either methods as long as it works!
Image Analyst
Image Analyst 2014년 2월 13일
So are we done here? If so, please mark my answer as Accepted. Thanks.
Ramo
Ramo 2014년 2월 13일
편집: Ramo 2014년 2월 13일
Your code didn't work though. however i voted you!

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Annotations에 대해 자세히 알아보기

질문:

2014년 2월 6일

편집:

2014년 2월 13일

Community Treasure Hunt

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

Start Hunting!

Translated by