golangで任意サイズのTiffファイルを保存する方法
golangを使って、画像解析を行っております。
現状では、tiffファイル(input)をMatrixとして読み込み、そのmatrixと同じサイズのファイルをTiffとして保存はできております。
しかし、任意のサイズのMatrixをtiffとして保存することは可能だとはおもいますが、
コードを作成するときにstuckしてしまい、ここに質問させていただいております。
ちなみに、PNGなど別のformatでの保存方法はわかりますが、なぜかTiffだけできません。
現状のコードをここに書いておきますので、上記の目的達成にはどこを改変すればよいのか等のコメントをいただけたら幸いです。
func SaveinTIFF_Color (FName string, Img *[][]int, memo string) {
data, _ := ioutil.ReadFile(FName)
img, _ := tiff.Decode(bytes.NewReader(data))
im := img.(*image.RGBA)
s := im.Bounds().Size();
MaxColSize := s.X
MaxRowSize := s.Y
var iy, ix, value int;
for iy = 0 ; iy < MaxRowSize; iy++ {
for ix = 0; ix < MaxColSize; ix++ {
value = (*Img)[iy][ix];
im.Pix[4*(iy*MaxColSize+ix)+0]=uint8(value) //red signal
im.Pix[4*(iy*MaxColSize+ix)+1]=uint8(value) //green signal
im.Pix[4*(iy*MaxColSize+ix)+2]=uint8(value) //blue signal
}
}
toimg, _ := os.Create(FName+"."+memo+".new.tif")
if (memo == "") {
toimg, _ = os.Create(FName+".new.tif")
}
defer toimg.Close()
err := tiff.Encode(toimg, img, nil)
if err != nil { panic(err) }
}
ご教授をお願いします。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
説明が足りませんでしたので、再度ここに追記させていただきます:
状況がわかりやすくなると思いますので、少し過程の話をさせていただきます。
FName = "sample.tif" (10x10 pixelとします)
Img = 10x10 matrix(sample.tifにdenoisingなどの加工を施した結果とします)
とします。
この仮定では、sample.tifに少し画像処理加工を施しただけですので、Imgもsample.tifとおなじサイズのmatrixになっています。この工程は上記のコードで対応できます。
しかし最終的には、このコードを改変し、以下のようにしたいです。
FName = "sample.tif" (サイズは10x10 pixelとします)
Img = 50x20 matrix(sample.tifに画像処理などを施し、Matrixサイズを変更した結果)
上記のコードでは、
data, _ := ioutil.ReadFile(FName) //sample.tifを読みこむ
img, _ := tiff.Decode(bytes.NewReader(data)) //tiffへのdecodeを行う
im := img.(*image.RGBA) //RGBAであることを規定する
この部分で、ファイルのサイズが10x10に規定されてしまい、
結果として、im.Pixのサイズが固定されてしまいます。
このため、Imgが10x10の場合はOKですが、それ以外のサイズではNGになります。
自分が考えるには、このim.Pixのサイズを変更できればよいかと思いますが、
それが上記のコードでどの部分を改変するのかがわかりません。
もしお分かりでしたら、ご教授をお願いします。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
こちらの質問の説明が不明慮かと思いますので、再々度、追記します。
大変申し訳ございません。
同じことですが、問題をシンプルにします。
ゴールとしては、任意のサイズの2D Matrix(slice型)をtifにセーブすることを目指しています。実際には、10x10 Matrixや50x20 matrixでも、セーブできるfunctionを作成したいです。
しかし、上記のコードでは、問題が2点あります。
1.「sample.tifを読みこむ」過程で、サイズ規定が入りってしまい、サイズの自由度がありません。
2.また、bytes.NewReaderは[]byteしか受け付けません。
2D matrix ([][]byte)を1D ([]byte)に変更することは可能ですが、その場合、tifにセーブした場合、データとしては残りますが、tif fileを画像として確認することができません。
どのようにしたら、この問題を回避して、任意のサイズの2D matrixをtifに保存することが可能でしょうか?
説明が不明慮な点がございました。また、根気強く回答を考えていただき、大変感謝しております。ご教授をお願いします。