2017-09-05 11 views
1

rawファイルを開くためのrawpy Pythonライブラリがあることは知っていますが、ピクセルデータを変更するにはrawから元のデータをデモザイクする必要があります。誰もがファイルをBGGRとしてエンコードされたカラーチャンネルを交換するソリューションを提供できますか?ありがとう!rawファイル(BGGR - > RGGB)のスワップカラーチャンネル

EDIT1:私は今、できる仕事をしていませんが、代わりにTIFF形式として保存します(2.7)スクリプトのpythonを持っています。

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) 

基本的に質問は、私は戻って形式に画像を保存することができる方法ですか? tiffからraw lossyへの変換ですか?

さらに、RAWファイルをデモザイクしないで、バイト(SBGGR8〜SRGGB8)をスワップする方法はありますか?この方法ではデータの損失の問題はないようです。

Edit2:ここで、チャンネルをロスレスでスワップできる、生のメタデータプロセスのMATLABコードです。しかし、MATLABはフリーソフトウェアではありません。私はPythonバージョンを探しています。私はPythonファイルプロセスの専門家ではないので、誰かが私のスクリプトを教えてくれますか?

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

最初にやり直してみませんか? – Marichyasana

答えて

1

これは、Python 2.7を使用してBチャネルとRチャネルを無損失で交換する方法です。

#!/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() 
関連する問題