

golangを使って、画像解析を行っております。

現状では、tiffファイル(input)をMatrixとして読み込み、そのmatrixと同じサイズのファイルをTiffとして保存はできております。

しかし、任意のサイズのMatrixをtiffとして保存することは可能だとはおもいますが、  
コードを作成するときにstuckしてしまい、ここに質問させていただいております。

ちなみに、PNGなど別のformatでの保存方法はわかりますが、なぜかTiffだけできません。

現状のコードをここに書いておきますので、上記の目的達成にはどこを改変すればよいのか等のコメントをいただけたら幸いです。

[code]

    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) }
    }
    
[/code]

ご教授をお願いします。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー  
説明が足りませんでしたので、再度ここに追記させていただきます：

状況がわかりやすくなると思いますので、少し過程の話をさせていただきます。  
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サイズを変更した結果）

上記のコードでは、

[code]

    data, _ := ioutil.ReadFile(FName)             //sample.tifを読みこむ
    img, _ := tiff.Decode(bytes.NewReader(data))　//tiffへのdecodeを行う        
    im := img.(*image.RGBA)                       //RGBAであることを規定する
    
[/code]

この部分で、ファイルのサイズが10x10に規定されてしまい、  
結果として、im.Pixのサイズが固定されてしまいます。  
このため、Imgが10x10の場合はOKですが、それ以外のサイズではNGになります。

自分が考えるには、このim.Pixのサイズを変更できればよいかと思いますが、  
それが上記のコードでどの部分を改変するのかがわかりません。

もしお分かりでしたら、ご教授をお願いします。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー  
こちらの質問の説明が不明慮かと思いますので、再々度、追記します。  
大変申し訳ございません。

同じことですが、問題をシンプルにします。

ゴールとしては、任意のサイズの2D Matrix(slice型)をtifにセーブすることを目指しています。実際には、10x10 Matrixや50x20
matrixでも、セーブできるfunctionを作成したいです。

しかし、上記のコードでは、問題が２点あります。

１．「sample.tifを読みこむ」過程で、サイズ規定が入りってしまい、サイズの自由度がありません。

２．また、[bytes.NewReader](https://golang.org/pkg/bytes/#Reader)は[]byteしか受け付けません。  
２D matrix ([][]byte)を1D
([]byte)に変更することは可能ですが、その場合、tifにセーブした場合、データとしては残りますが、tif
fileを画像として確認することができません。

どのようにしたら、この問題を回避して、任意のサイズの2D matrixをtifに保存することが可能でしょうか？

説明が不明慮な点がございました。また、根気強く回答を考えていただき、大変感謝しております。ご教授をお願いします。


CC BY-SA 3.0
2017-05-20T15:49:26.247
34873
2020-02-25T11:01:40.247
2017-05-23T19:19:47.627
11048
11048
question
go
golangで任意サイズのTiffファイルを保存する方法


不本意ではありますが、現在のscriptを利用しての方法を見つけました。

任意のサイズのmatrixを保存する前に、そのmatrixのサイズと同じサイズのtif imageを用意します。

例えば、下記のcommand（linux+ImageMagick）を使用しますと、200x100のtifが作成できます。

[code]

    convert sample.tif -resize 200x100! 200x100.tif
    
[/code]

このコマンドをscriptの中で動かして、見本を作成します。  
その後、上記のfunctionでファイル名を少し変えるだけで、対応はできます。

が、もっとエレガントな方法があると思います。ご教授をお願いします。


CC BY-SA 3.0
2017-05-26T20:47:06.097
35052
2017-05-26T20:47:06.097
11048
34873
answer