2017-09-05 2 views
1

Je sais qu'il existe une bibliothèque rawpy python pour ouvrir le fichier brut, mais pour modifier les données de pixel, les données d'origine de raw doivent être démasquées. Quelqu'un pourrait-il fournir une solution pour échanger le canal de couleur pour fichier brut codé en tant que BGGR? Merci!Echanger le canal de couleur pour le fichier brut (BGGR -> RGGB)

Edit1: J'ai maintenant un script python (2.7) qui peut fait le travail, mais il enregistre comme le format tiff au lieu de brut.

import rawpy 
import imageio 

path = 'xxxx.raw' 
raw = rawpy.imread(path) 
rgb = raw.postprocess() 
for x in rgb: 
    for y in x: 
     temp = y[0] 
     y[0] = y[2] 
     y[2] = temp 
raw.raw_image 
imageio.imsave('default.tiff', rgb) 

Fondamentalement, la question est de savoir comment puis-je stocker l'image de nouveau dans format RAW? Est-ce que la conversion de tiff en raw lossy?

De plus, est-il possible de ne pas démolir le fichier brut et d'échanger les octets (SBGGR8 à SRGGB8)? De cette façon semble pas de problème de perte de données. Edit2: Voici mon code MATLAB brut de processus de métadonnées qui peut permuter le canal sans perte. Mais MATLAB n'est pas un logiciel libre, je suis à la recherche d'une version python. Comme je ne suis pas un expert en traitement de fichiers python, quelqu'un pourrait-il m'aider avec mon script?

row = 640; col = 480; 
fin = fopen('original.raw','r'); 
input = fread(fin,row*col,'uint8=>uint8'); 
output = reshape(input,row,col); 
for y = 1:2:639 
    for x = 1:2:479 
     temp = output(y,x); 
     output(y,x) = output(y+1, x+1); 
     output(y+1, x+1) = temp; 
    end 
end 
fout = fopen('swapped.raw', 'w'); 
fwrite(fout,output); 
fclose(fin); 
fclose(fout); 
+0

Que diriez-vous de le faire en premier? – Marichyasana

Répondre

1

Ceci est la manière sans perte de permuter les canaux B et R en utilisant Python 2.7.

#!/usr/bin/python2.7 
import numpy as np 
row = 480 
col = 640 
fin = open('example.raw','r') 
inp = np.fromfile(fin,np.dtype(np.uint8),row*col) 
output = np.reshape(inp,(row,col)) 

def my_range(start, end, step): 
    while start <= end: 
     yield start 
     start += step 

for y in my_range(0, row-2, 2): 
    for x in my_range(0, col-2, 2): 
     temp = output[y][x] 
     output[y][x] = output[y+1][x+1] 
     output[y+1][x+1] = temp 

fout = open('output.raw','w') 
fout.writelines(output) 
fin.close() 
fout.close()