Apostolos Fanakis
6 years ago
commit
90007bbfd0
2 changed files with 94 additions and 0 deletions
@ -0,0 +1,94 @@ |
|||
function xc = bayer2rgb(xb, M, N, method) |
|||
%BAYER2RGB Summary of this function goes here |
|||
% Detailed explanation goes here |
|||
|
|||
% Initializes the struct that's going to store the RGB image |
|||
xc = struct; |
|||
xc.red = zeros(M, N); |
|||
xc.green = zeros(M, N); |
|||
xc.blue = zeros(M, N); |
|||
|
|||
% Initializes helper variables |
|||
bayerPatternDimY = size(xb, 1); |
|||
bayerPatternDimX = size(xb, 2); |
|||
|
|||
% Calculates the distance between two grid points for both axes |
|||
gridPointsStepLengthY = (bayerPatternDimY - 1) / (M - 1); |
|||
gridPointsStepLengthX = (bayerPatternDimX - 1) / (N - 1); |
|||
% Calculates the coordinates of the grid points for both axes |
|||
gridPointsCoordinatesY = 1:gridPointsStepLengthY:bayerPatternDimY; |
|||
gridPointsCoordinatesX = 1:gridPointsStepLengthX:bayerPatternDimX; |
|||
|
|||
if (strcmp(method, 'nearest')) |
|||
for currentRow = 1:M |
|||
% Determines the index of the even row of the original image |
|||
% that is closest to this ordinate (currentRow) of the new |
|||
% image |
|||
idx = mod(gridPointsCoordinatesY(currentRow), 2) >= 1; |
|||
nearestEvenRow = floor(gridPointsCoordinatesY(currentRow)); |
|||
nearestEvenRow(idx) = nearestEvenRow(idx)+1; |
|||
if (nearestEvenRow > bayerPatternDimY) |
|||
nearestEvenRow = nearestEvenRow - 2; |
|||
end |
|||
|
|||
% Determines the index of the odd row of the original image |
|||
% that is closest to this ordinate (currentRow) of the new |
|||
% image |
|||
idx = mod(gridPointsCoordinatesY(currentRow), 2) < 1; |
|||
nearestOddRow = floor(gridPointsCoordinatesY(currentRow)); |
|||
nearestOddRow(idx) = nearestOddRow(idx)+1; |
|||
if (nearestOddRow > bayerPatternDimY) |
|||
nearestOddRow = nearestOddRow - 2; |
|||
end |
|||
|
|||
% Determines the index of the row (even or odd) of the original |
|||
% image that is closest to this ordinate (currentRow) of the |
|||
% new image |
|||
totalNearestRow = round(gridPointsCoordinatesY(currentRow)); |
|||
|
|||
for currentCol = 1:N |
|||
% Determines the index of the even column of the original |
|||
% image that is closest to this abscissa (currentCol) of |
|||
% the new image |
|||
idx = mod(gridPointsCoordinatesX(currentCol), 2) >= 1; |
|||
nearestEvenCol = floor(gridPointsCoordinatesX(currentCol)); |
|||
nearestEvenCol(idx) = nearestEvenCol(idx)+1; |
|||
if (nearestEvenCol > bayerPatternDimX) |
|||
nearestEvenCol = nearestEvenCol - 2; |
|||
end |
|||
|
|||
% Determines the index of the even column of the original |
|||
% image that is closest to this abscissa (currentCol) of |
|||
% the new image |
|||
idx = mod(gridPointsCoordinatesX(currentCol), 2) < 1; |
|||
nearestOddCol = floor(gridPointsCoordinatesX(currentCol)); |
|||
nearestOddCol(idx) = nearestOddCol(idx)+1; |
|||
if (nearestOddCol > bayerPatternDimX) |
|||
nearestOddCol = nearestOddCol - 2; |
|||
end |
|||
|
|||
% Determines the index of the column (even or odd) of the |
|||
% original image that is closest to this abscissa |
|||
% (currentCol) of the new image |
|||
totalNearestCol = round(gridPointsCoordinatesX(currentCol)); |
|||
if (mod(totalNearestRow, 2) == 0 && mod(totalNearestCol, 2) ~= 0) |
|||
totalNearestCol = totalNearestCol + 1; |
|||
elseif (mod(totalNearestRow, 2) ~= 0 && mod(totalNearestCol, 2) == 0) |
|||
totalNearestCol = totalNearestCol - 1; |
|||
end |
|||
|
|||
% Closest neighbors per colour can be determined by |
|||
% observing the Bayer pattern |
|||
xc.red(currentRow, currentCol) = xb(nearestOddRow, nearestEvenCol); |
|||
xc.blue(currentRow, currentCol) = xb(nearestEvenRow, nearestOddCol); |
|||
xc.green(currentRow, currentCol) = xb(totalNearestRow, totalNearestCol); |
|||
end |
|||
end |
|||
elseif (strcmp(method, 'linear')) |
|||
end |
|||
|
|||
% Combines colours to a single image array and shows the result |
|||
rgbImage = cat(3, xc.blue, xc.green, xc.red); |
|||
figure(); |
|||
imshow(rgbImage); |
|||
end |
Binary file not shown.
Loading…
Reference in new issue