MATLAB : Aligning RGB Channels

4 次查看(过去 30 天)
Rahul Mishra
Rahul Mishra 2020-6-5
编辑: DGM 2024-1-1
Align the 3 images from earlier project to get a clearer color image. This project needs to be done using SUM of SQUARED DIFFERENCES APPROACH.
please help me with the code....
%Read the image
img = imread('course1image.jpg');
B=img(1:340,1:400);
G=img(341:682,1:400);
R=img(683:1023,1:400);
b=im2double(B);
g=im2double(G);
r=im2double(R);
shiftr=circshift(r,[-10,10]);
shiftb=circshift(b,[-5,5]);
ColorImg_aligned=cat(3,shiftr,g,shiftb);

回答(3 个)

Thyagharajan K K
Thyagharajan K K 2020-6-12
I have solved the problem which passes first 5 tests. To solve the last part, I need the following clarifications.
What is the meaning of this instruction already set in the problem? should we move 51x51 green block on red channel to a maximum of 10 positions left and 10 position right to find matching
shiftr=circshift(r,[-10,10]);
if 51x51 g pixel block finds a match in r should we extend the size of the channels. The problem is not clear. It is difficult to understand the aim and methodology expected to follow. In the video r and b channels are moved completely on g channel but in the problem 51x51 pixel block is introduced for matching. The problem can be defined with more clarity.
%Read the image
img = imread('course1image.jpg');
B=img(1:341,1:400);
G=img(342:682,1:400);
R=img(683:1023,1:400);
b=double(B);
g=double(G);
r=double(R);
%take a block of size 50x50 pixels
g1 = g(146:196, 175:225);
r1 = r(146:196, 175:225);
b1 = b(146:196, 175:225);
ref_img_region = g1;
shiftr=circshift(r,[-10,10]);
shiftb=circshift(b,[-5,5]);
ColorImg_aligned=cat(3,uint8(shiftr),uint8(g),uint8(shiftb));
  1 个评论
Deema Alyones
Deema Alyones 2022-3-28
编辑:DGM 2024-1-1
I have a question on one of the parts in the code you wrote. What does the numbers inside the parentheses represent and how can I find these values from the image?
B=img(1:341,1:400);
G=img(342:682,1:400);
R=img(683:1023,1:400);
and
g1 = g(146:196, 175:225);
r1 = r(146:196, 175:225);
b1 = b(146:196, 175:225);

请先登录,再进行评论。


Medical Imaging
Medical Imaging 2020-8-6
编辑:DGM 2024-1-1
I hope the below soultion helps:
%Read the image
img = imread('course1image.jpg');
B=img(1:341,1:400);
G=img(342:682,1:400);
R=img(683:1023,1:400);
b=double(B);
g=double(G);
r=double(R);
b1=double(b(146:196,175:225));
g1=double(g(146:196,175:225));
r1=double(r(146:196,175:225));
ref_img_region = double(g1);
ref_img_region = double(ref_img_region);
error = inf;
for i = -10:10
for j = -10:10
shiftr1=circshift(r1,[i,j]);
temp1 = sum(sum((double(g1) - double(shiftr1)) .^ 2));
if temp1 < error
error = temp1;
shiftr_row = i;
shiftr_col = j;
end
end
end
error = inf;
for i = -10:10
for j = -10:10
shiftb2=circshift(b1,[i,j]);
temp2 = sum(sum((double(g1) - double(shiftb2)) .^ 2));
if temp2 < error
error = temp2;
shiftb_row = i;
shiftb_col = j;
end
end
end
shiftr=circshift(r,[shiftr_row,shiftr_col]);
shiftb=circshift(b,[shiftb_row,shiftb_col]);
outpict=cat(3,uint8(shiftr),uint8(g),uint8(shiftb));
imshow(ColorImg_aligned)

Chit La Pyae Myo Hein
%Read the image
img = imread('course1image.jpg');
[r,c] = size(img);
B = img(1:r/3,:);
G = img((r/3)+1:(2*r/3),:);
R = img((2*r/3)+1:r,:);
ref_img_region = G;
[rg,cg] = size(ref_img_region);
ref_img_region = ref_img_region(ceil((rg-50)/2) :ceil((rg-50)/2) + 50,ceil((cg-50)/2) :ceil((cg-50)/2) + 50);
%disp(size(ref_img_region));
ref_img_region = double(ref_img_region);
% Naive way
% ColorImg_aligned = cat(3,R,G,B);
% imshow(ColorImg_aligned);
% SSD way
nR = align(G,R);
nB = align(G,B);
ColorImg_aligned = cat(3,nR,G,nB);
imshow(ColorImg_aligned);
function aligned = align(green,red)
[red_row,red_col] = size(red);
[green_row,green_col] = size(green);
% checking SSD for cropped part of the images for faster calculation
cropped_red = red(ceil((red_row-50)/2) : ceil((red_row-50)/2) + 50,ceil((red_col-50)/2) :ceil((red_col-50)/2) + 50);
cropped_green = green(ceil((green_row-50)/2) : ceil((green_row-50)/2) + 50,ceil((green_col-50)/2) :ceil((green_col-50)/2) + 50);
MiN = 9999999999;
r_index = 0;
r_dim = 1;
for i = -10:10
for j = -10:10
ssd = SSD(cropped_green,circshift(cropped_red,[i,j]));
if ssd < MiN
MiN = ssd;
r_index = i;
r_dim = j;
end
end
end
aligned = circshift(red,[r_index,r_dim]);
end
function ssd = SSD(a1,a2)
x = double(a1)-double(a2);
ssd = sum(x(:).^2);
end

类别

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