Difference between revisions of "Working with raw image data"

From ElphelWiki
Jump to: navigation, search
(Created page with "==Downloading== * Available options (channels can be 0..3): # set receiving buffer size in 4kB pages (thus 4096 equals to 16MB) echo {size} > /sys/devices/soc0/elphel393-mem...")
 
(Processing)
(14 intermediate revisions by the same user not shown)
Line 1: Line 1:
==Downloading==
+
==<font color='darkblue'>Downloading</font>==
 
* Available options (channels can be 0..3):
 
* Available options (channels can be 0..3):
  # set receiving buffer size in 4kB pages (thus 4096 equals to 16MB)
+
  <font size='2em'># set receiving buffer size in 4kB pages (thus 4096 equals to 16MB)
  echo {size} > /sys/devices/soc0/elphel393-mem\@0/buffer_pages_raw_chn2
+
  '''echo {size} > /sys/devices/soc0/elphel393-mem\@0/buffer_pages_raw_chn2'''
 
  # start from the N-th frame position in buffer. Currently, 0 or 1
 
  # start from the N-th frame position in buffer. Currently, 0 or 1
  echo 1 > /sys/devices/soc0/elphel393-videomem\@0/video_frame_number
+
  '''echo 1 > /sys/devices/soc0/elphel393-videomem\@0/video_frame_number'''
 
  # initiate transfer, wait for X-th frame (X - absolute frame number), 0 = no waiting
 
  # initiate transfer, wait for X-th frame (X - absolute frame number), 0 = no waiting
  echo X > /sys/devices/soc0/elphel393-videomem\@0/membridge_start2
+
  '''echo X > /sys/devices/soc0/elphel393-videomem\@0/membridge_start2'''
 
 
  # copy to file
 
  # copy to file
  cat /dev/image_raw2 > /tmp/test.raw
+
  '''cat /dev/image_raw2 > /tmp/test.raw'''
 
  # see in hex
 
  # see in hex
  hexdump /tmp/test.raw
+
  '''hexdump /tmp/test.raw'''
 +
# copy to PC
 +
'''scp /tmp/test.raw user@address:/path/'''</font>
 +
 
 +
* Minimal:
 +
 
 +
<font size='2em'>'''echo 4096 > /sys/devices/soc0/elphel393-mem\@0/buffer_pages_raw_chn2'''
 +
'''echo 0 > /sys/devices/soc0/elphel393-videomem\@0/membridge_start2'''
 +
'''cat /dev/image_raw2 > /tmp/test.raw'''</font>
 +
 
 +
 
 +
 
 +
==<font color='darkblue'>Displaying</font>==
 +
===ImageMagick===
 +
* Camera settings: 2592x1936 JPEG, actual valid pixels - 2596x1940, pixels read - 2608x1940:
 +
<font size='2em'>convert -size 2608x1940 -depth 8 -endian MSB -normalize gray:test.raw -compress lzw result.tiff</font>
 +
* Camera settings: 2592x1936 JP4, actual pixels available: 2592x1936
 +
<font size='2em'>convert -size 2592x1936 -depth 8 -endian MSB -normalize gray:test.raw -compress lzw result.tiff</font>
 +
 
 +
The result is a grayscale tiff
 +
 
 +
===bayer2rgb program===
 +
* Available [https://github.com/jdthomas/bayer2rgb here].
 +
* Camera settings: 2592x1936 JPEG:
 +
<font size='2em'>bayer2rgb -w 2608 -v 1940 -b 8 -f GRBG -m AHD -t -i test.raw -o test.tiff</font>
 +
The result is a colored tiff image. Pixel values are linear.
 +
 
 +
===Python===
 +
* Camera settings: 2592x1936 JPEG:
 +
<font size='2em'>''#!/usr/bin/python3''
 +
from PIL import Image
 +
rawData = open("test.raw", 'rb').read()
 +
imgSize = (2608,1940)# the image size
 +
img = Image.frombytes('L', imgSize, rawData)
 +
img.save("result.jpeg")# can give any format you like .png</font>
  
# copy to PC
+
The result will be a grayscale image.
scp /tmp/test.raw user@address:/path/
 
  
  
* Minimal:
 
  
echo 4096 > /sys/devices/soc0/elphel393-mem\@0/buffer_pages_raw_chn2
+
==<font color='darkblue'>Processing</font>==
  echo 0 > /sys/devices/soc0/elphel393-videomem\@0/membridge_start2
+
  Open the file and process as pixel array RGGB, GRBG, GBRG or BGGR - 8 or 16 bits
cat /dev/image_raw2 > /tmp/test.raw
 
  
==Previewing==
+
[[Category:393]]
 +
[[Category:raw image data]]
 +
[[Category:bayer pixel array]]

Revision as of 11:36, 12 January 2018

Downloading

  • Available options (channels can be 0..3):
# set receiving buffer size in 4kB pages (thus 4096 equals to 16MB)
echo {size} > /sys/devices/soc0/elphel393-mem\@0/buffer_pages_raw_chn2
# start from the N-th frame position in buffer. Currently, 0 or 1
echo 1 > /sys/devices/soc0/elphel393-videomem\@0/video_frame_number
# initiate transfer, wait for X-th frame (X - absolute frame number), 0 = no waiting
echo X > /sys/devices/soc0/elphel393-videomem\@0/membridge_start2
# copy to file
cat /dev/image_raw2 > /tmp/test.raw
# see in hex
hexdump /tmp/test.raw
# copy to PC
scp /tmp/test.raw user@address:/path/
  • Minimal:
echo 4096 > /sys/devices/soc0/elphel393-mem\@0/buffer_pages_raw_chn2
echo 0 > /sys/devices/soc0/elphel393-videomem\@0/membridge_start2
cat /dev/image_raw2 > /tmp/test.raw


Displaying

ImageMagick

  • Camera settings: 2592x1936 JPEG, actual valid pixels - 2596x1940, pixels read - 2608x1940:
convert -size 2608x1940 -depth 8 -endian MSB -normalize gray:test.raw -compress lzw result.tiff
  • Camera settings: 2592x1936 JP4, actual pixels available: 2592x1936
convert -size 2592x1936 -depth 8 -endian MSB -normalize gray:test.raw -compress lzw result.tiff

The result is a grayscale tiff

bayer2rgb program

  • Available here.
  • Camera settings: 2592x1936 JPEG:
bayer2rgb -w 2608 -v 1940 -b 8 -f GRBG -m AHD -t -i test.raw -o test.tiff

The result is a colored tiff image. Pixel values are linear.

Python

  • Camera settings: 2592x1936 JPEG:
#!/usr/bin/python3
from PIL import Image
rawData = open("test.raw", 'rb').read()
imgSize = (2608,1940)# the image size
img = Image.frombytes('L', imgSize, rawData)
img.save("result.jpeg")# can give any format you like .png

The result will be a grayscale image.


Processing

Open the file and process as pixel array RGGB, GRBG, GBRG or BGGR - 8 or 16 bits