RGGB (x,y) –> RGB = (x/2,y/2,3)

Question:

The output of a camerasensor is SRGGB12.

  import numpy as np

    rggb = np.array([['R', 'G', 'R', 'G'],
                     ['G', 'B', 'G', 'B'],
                     ['R', 'G', 'R', 'G'],
                     ['G', 'B', 'G', 'B']])
    
    
    test2 = np.chararray((3, 4, 4))
    test2[:] = ''
    test2[2,::2, ::2] = rggb[1::2, 1::2]  # blue
    test2[1,1::2, ::2] = rggb[0::2, 1::2]  # green
    test2[1,::2, 1::2] = rggb[1::2, 0::2]  # green
    test2[0,1::2, 1::2] = rggb[0::2, 0::2]  # red
    print(test2)

>>
    [[['' '' '' '']
      ['' b'R' '' b'R']
      ['' '' '' '']
      ['' b'R' '' b'R']]
    
     [['' b'G' '' b'G']
      [b'G' '' b'G' '']
      ['' b'G' '' b'G']
      [b'G' '' b'G' '']]
    
     [[b'B' '' b'B' '']
      ['' '' '' '']
      [b'B' '' b'B' '']
      ['' '' '' '']]]
    (3, 4, 4)

Now I would like to delete/trim all of the empty entries. In the example the rggb array was 4×4. The wanted matrice should be (3,2,2).

Thats the function, which needs to be adjusted accordingly:

def conver_rggb_to_rgb(rggb):

  ret_arr = np.zeros((rggb.shape[0]//2, rggb.shape[1]//2, 3)).astype(np.uint16)

  blue = rggb[1::2, 1::2]    # blue
  green1 = rggb[0::2, 1::2]  # green
  green2 = rggb[1::2, 0::2]  # green
  red = rggb[0::2, 0::2]     # red

  ret_arr[:,:,0] = red
  ret_arr[:,:,1] = (green1 + green2)/2
  ret_arr[:,:,2] = blue

  return ret_arr

idea

Asked By: SkyImager

||

Answers:

def conver_rggb_to_rgb(rggb):

     ret_arr = np.zeros((rggb.shape[0]//2,rggb.shape[1]//2,3)).astype(np.uint16)
     blue = rggb[1::2, 1::2]    # blue
     green1 = rggb[0::2, 1::2]  # green
     green2 = rggb[1::2, 0::2]  # green
     red = rggb[0::2, 0::2]     # red

     ret_arr[0] = ret_arr[0] + red
     ret_arr[1] = ret_arr[1] + (green1 + green2)/2
     ret_arr[2] = ret_arr[2] + blue

     return ret_arr
Answered By: Mushtaq Patel
import numpy as np
def convert_rggb_to_rgb(rggb):

 ret_arr = np.zeros((3,rggb.shape[0]//2,rggb.shape[1]//2)).astype(np.uint16)
 blue = rggb[1::2, 1::2]    # blue
 green1 = rggb[0::2, 1::2]  # green
 green2 = rggb[1::2, 0::2]  # green
 red = rggb[0::2, 0::2]     # red

 ret_arr[0] = ret_arr[0] + red
 ret_arr[1] = ret_arr[1] + (green1 + green2)/2
 ret_arr[2] = ret_arr[2] + blue

 return ret_arr

Usage example:

x=2032
y=1520
Megapixel = x*y
rggb = np.zeros(Megapixel).reshape(2032,1520) 

test = convert_rggb_to_rgb(rggb)
print(test.shape)

Output:

(3,1016,760)
Answered By: SkyImager
Categories: questions Tags: , , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.