2020年9月28日月曜日

RICOH THETAの天頂補正

瀬戸大橋を渡るときに、RICOH THETA Vで静止画のインターバル撮影を行いました。

画像を確認すると、水平が取れているものや大きく傾いているものなど、バラバラでした。

車での移動時の撮影は、天頂が狂いやすいのでしょう。

傾いている画像の修正方法をexiftoolを使っていろいろ試してみました。

結論は、下記のコマンドで修正出来ました。

exiftool -Accelerometer="0.38 0.61" -PosePitchDegrees=0.6 -PoseRollDegrees=0.4 TARGET.JPG

画像の傾き(天頂)を決めるタグは、次の5つのようです。

  • Accelerometer
  • Pose Pitch Degrees
  • Pose Roll Degrees
  • Ricoh Pitch
  • Ricoh Roll

Ricoh PitchとRicoh Rollは、exiftoolで読み取りは出来ますが、書き込みは出来ません。ただし、Accelerometerの値を変えると連動して同じ値になります。

THETAアプリは、Accelerometerで天頂を決めているようで、Accelerometerがない画像は、Ricoh PitchとRicoh Rollの値は無視されます。

天頂補正手順

インターバル撮影を行った画像の Accelerometer、Pose Pitch Degrees、Pose Roll Degreesの値を下記コマンドで読み取ります。

画像のフォルダをカレントフォルダにした後、
exiftool -Accelerometer -PosePitchDegrees -PoseRollDegrees .

結果は次のとおりです。

======== ./20200918_082725.JPG
Accelerometer                   : 342.68 0.16
Pose Pitch Degrees              : 0.2
Pose Roll Degrees               : -17.3
======== ./20200918_082729.JPG
Accelerometer                   : 5.71 0.2
Pose Pitch Degrees              : 0.2
Pose Roll Degrees               : 5.7
======== ./20200918_082733.JPG
Accelerometer                   : 8.64 -1.2
Pose Pitch Degrees              : -1.2
Pose Roll Degrees               : 8.6
======== ./20200918_082737.JPG
Accelerometer                   : 357.82 3.49
Pose Pitch Degrees              : 3.5
Pose Roll Degrees               : -2.2
======== ./20200918_082913.JPG
Accelerometer                   : 4.13 -1.04
Pose Pitch Degrees              : -1.0
Pose Roll Degrees               : 4.1
======== ./20200918_082917.JPG
Accelerometer                   : 341.76 -3.51
Pose Pitch Degrees              : -3.5
Pose Roll Degrees               : -18.2
======== ./20200918_082922.JPG
Accelerometer                   : 0.38 0.61
Pose Pitch Degrees              : 0.6
Pose Roll Degrees               : 0.4
======== ./20200918_082926.JPG
Accelerometer                   : 353.81 2.1
Pose Pitch Degrees              : 2.1
Pose Roll Degrees               : -6.2
======== ./20200918_082930.JPG
Accelerometer                   : 6.16 2.26
Pose Pitch Degrees              : 2.3
Pose Roll Degrees               : 6.2
======== ./20200918_082935.JPG
Accelerometer                   : 354.78 -1.59
Pose Pitch Degrees              : -1.6
Pose Roll Degrees               : -5.2
======== ./20200918_082939.JPG
Accelerometer                   : 353.72 -9.52
Pose Pitch Degrees              : -9.5
Pose Roll Degrees               : -6.3
======== ./20200918_082943.JPG
Accelerometer                   : 4.39 10.86
Pose Pitch Degrees              : 10.9
Pose Roll Degrees               : 4.4
======== ./20200918_082948.JPG
Accelerometer                   : 3.02 3.31
Pose Pitch Degrees              : 3.3
Pose Roll Degrees               : 3.0
======== ./20200918_082952.JPG
Accelerometer                   : 5.08 10.61
Pose Pitch Degrees              : 10.6
Pose Roll Degrees               : 5.1
======== ./20200918_083002.JPG
Accelerometer                   : 349.46 -6.3
Pose Pitch Degrees              : -6.3
Pose Roll Degrees               : -10.5
======== ./20200918_083009.JPG
Accelerometer                   : 3.37 -22.09
Pose Pitch Degrees              : -22.1
Pose Roll Degrees               : 3.4
======== ./20200918_083013.JPG
Accelerometer                   : 349.4 -17.41
Pose Pitch Degrees              : -17.4
Pose Roll Degrees               : -10.6
======== ./20200918_083018.JPG
Accelerometer                   : 0.72 -8.05
Pose Pitch Degrees              : -8.1
Pose Roll Degrees               : 0.7
======== ./20200918_083022.JPG
Accelerometer                   : 354.3 -1.73
Pose Pitch Degrees              : -1.7
Pose Roll Degrees               : -5.7
======== ./20200918_083026.JPG
Accelerometer                   : 359.19 6.06
Pose Pitch Degrees              : 6.1
Pose Roll Degrees               : -0.8
======== ./20200918_083030.JPG
Accelerometer                   : 1.2 18.72
Pose Pitch Degrees              : 18.7
Pose Roll Degrees               : 1.2
======== ./20200918_083035.JPG
Accelerometer                   : 337.98 -32.02
Pose Pitch Degrees              : -32.0
Pose Roll Degrees               : -22.0
======== ./20200918_083039.JPG
Accelerometer                   : 0.01 -13.59
Pose Pitch Degrees              : -13.6
Pose Roll Degrees               : 0.0
======== ./20200918_083043.JPG
Accelerometer                   : 356.98 -5.54
Pose Pitch Degrees              : -5.5
Pose Roll Degrees               : -3.0
======== ./20200918_083048.JPG
Accelerometer                   : 344.14 -8.74
Pose Pitch Degrees              : -8.7
Pose Roll Degrees               : -15.9

同じ角度で撮ったものですが、値は変わっています。

ひとつひとつ、THETA アプリで表示させると 20200918_082922.JPG で水平が取れていました。

======== ./20200918_082922.JPG
Accelerometer                   : 0.38 0.61
Pose Pitch Degrees              : 0.6
Pose Roll Degrees               : 0.4

大きく傾いている 20200918_083035.JPG を 20200918_082922.JPG の値にexiftoolを使って変更します。

======== ./20200918_083035.JPG

Accelerometer                   : 337.98 -32.02
Pose Pitch Degrees              : -32.0
Pose Roll Degrees               : -22.0

コマンド
exiftool -Accelerometer="0.38 0.61" -PosePitchDegrees=0.6 -PoseRollDegrees=0.4 20200918_083035.JPG

値を修正した 20200918_083035.JPG をTHETAアプリで確認すると水平が取れています。

補足

  • Accelerometerの値を変えると、THETAアプリでもGoogleフォトでも水平が取れます。同時に、Ricoh PitchとRicoh Rollの値がAccelerometerと同じ値に変更されます。

  • THETAアプリは、Accelerometerの値で天頂補正し、Pose Pitch DegreesとPose Roll Degreesの値は無視します。そのため、Accelerometerタグがない画像については、補正無しで表示するようです。

  • Googleフォトは、Accelerometerがある場合、この値を優先し、Pose Pitch DegreesとPose Roll Degreesの値は無視します。
    Accelerometerタグがない画像については、Pose Pitch DegreesとPose Roll Degreesの値で補正しているようです。

Accelerometerタグがない場合

  • exiftoolでは、Accelerometerの書き込みが出来ないため、タグで調整出来ないので画像そのものを傾きがないように修正します。
  • 使用するソフトは、ステレオフォトメーカーで、実行ファイルは、stphmkr.exe、ポータブルアプリです。http://stereo.jpn.org/theta/thetalevel.html
    1. [ファイル]>[シングル画像を開く]
    2. [編集]>[THETA画像編集]>[THETA画像変形処理]で、X軸とY軸を交互に移動して水平を出します。
    3. 保存するとexifデータが消えてしまうので、タグを全削除してから、オリジナルのタグを全コピーをします。
      exiftool -overwrite_original -all= update.jpg
      exiftool -overwrite_original -tagsFromFile source.jpg -codedcharacterset=utf8 update.jpg
    4. 天頂補正が0となっていますので次のコマンドを実行します。そうしないとGoogleフォトで水平が取れません。
      exiftool -overwrite_original -PosePitchDegrees=0  -PoseRollDegrees=0  update.jpg

    2020年1月22日水曜日

    exiftoolの使い方

    私の写真の整理方法

    1. ファイル名は撮影日に変更します。例:20200122_100000.jpg
    2. 写真のランクを埋め込みます。高いランクの写真は、googleフォトにアップしていつでも見られるようにします。
    3. googleフォトは、撮影日で並び替えられるので、撮影日の無い写真ファイルに撮影日を埋め込みます。撮影日が無い写真とは、スキャンした写真他です。
    4. googleフォトの情報欄に写真の説明が表示されるよう、タグを埋め込みます。

    exifについて

    • 埋め込む文字コードを、UTF-8に統一します。これが重要です。
    • 画像ビューワーは、以前は、XnViewを使い、IPTCデータ編集機能を使っていましたが、SHIFT-JISで埋め込まれるため、googleフォトで文字化けしました。
    • また、UTF-8で埋め込んだ日本語タグは、XnViewで文字化けします。
    • そのため、ビューワーは、XnView MPに変更しました。XnView MPは、タグ検索が出来るので便利です。

    exiftoolについて

    • タグ埋め込みに、exiftoolを使います。機能が多く、コマンドラインで大量の写真を一括編集できて効率がとても良いからです。
    • exiftoolを使うにあたって、pathを通しておきます。(環境変数のpathに設定)
    • フォルダ名やファイル名に日本語がある場合、正常動作しないので、日本語を含むフォルダ名がある場合は、先にカレントフォルダに変更します。ファイル名は、私の場合、撮影日時にしているため日本語はありません。

    exiftoolのコマンド例

    Exifの日付埋め込み

    例として、"T:\遊馬2のアルバム\Target.jpg"の撮影日付を、1980/01/22 12:00:00に変更します。
    T:
    cd "T:\遊馬2のアルバム\"
    exiftool -overwrite_original -AllDates="1980:01:22 12:00:00"  Target.jpg
    
    • -overwrite_originalは、ファイルを上書きします。
    • -AllDatesは、下記の3つのタグに同じ日時を埋め込みます。
      ・Date/Time Original
      ・Create Date
      ・Modify Date
    • 日時は、コロンで区切ることに注意。

    ランクの埋め込み

    写真の評価(ランク)を5段階で埋め込みます。
    exiftool -overwrite_original -Rating=5 Target.jpg
    • Rateingの数値は、1から5とします。
    • XnView MPを使って任意の評価の画像ファイルを選択出来ます。

    写真の説明文の埋め込み

    • Googleフォトの説明の優先順位は、実験の結果下記の通りでした。
      ・第一に、xmp:Caption
      ・第二に、IPTC:Caption-Abstract
    • xmp:Captionと、IPTC:Caption-Abstractは、UTF-8でないと文字化けします。
    • exiftool はコマンドラインで日本語が使えません。
      悪い例 exiftool -overwrite_original -IPTC:Caption-Abstract="テスト"  Target.jpg
    • そのため、変更するファイル名にタグ名と内容を記述したUTF-8のcsvファイルを先に作ってそれを元に一括で埋め込む方法をとります。私は、説明文だけでなくキーワードや撮影者のデータも埋め込めるEXCELシートを作り、マクロで、UTF-8のcsvファイルの書き出しとタグ埋め込みのバッチファイルを実行して複数のファイルを一括処理しています。
    SourceFile,IPTC:Caption-Abstract,Copyright,IPTC:Keywords,IPTC:By-line,IPTC:CopyrightNotice,ImageDescription,XPTitle,XPKeywords,Rights,Subject,Title,Description
    20200122_094251.JPG,和歌山城,遊馬2,風景,遊馬2,遊馬2,和歌山城,和歌山城,風景,遊馬2,風景,和歌山城,和歌山城
    20200122_115815.JPG,和歌山城、伏虎像,遊馬2,友人;観光,遊馬2,遊馬2,和歌山城、伏虎像,和歌山城、伏虎像,友人;観光,遊馬2,友人;観光,和歌山城、伏虎像,和歌山城、伏虎像
    20200122_120126.JPG,和歌山城、伏虎像,遊馬2,友人;観光,遊馬2,遊馬2,和歌山城、伏虎像,和歌山城、伏虎像,友人;観光,遊馬2,友人;観光,和歌山城、伏虎像,和歌山城、伏虎像
    
    • keywordは、セミコロンで区切ります。
    • 説明の中にカンマを使ってはいけません。使うとcsvファイルの区切りがずれてしまいます。
    • このcsvは、UTF-8で保存します。
    • ファイル名を、tag.csv とし、下記のバッチファイルで内容を埋め込みます。
    T:
    CD "T:\遊馬2のアルバム\2020\202001\20200122\"
    exiftool -F -sep ";" -overwrite_original -csv="tag.csv" -codedcharacterset=utf8 -charset iptc=latin2 .
    
    • このバッチファイルは、SHIFT-JISで保存しています。
    • -sep で、keywordの区切り文字を指定します。
    • -F は、下記のような埋め込み時の質問に自動で応答するオプションみたいです。
      Error: [minor] MakerNotes offsets may be incorrect (fix or ignore?)

    cmdでのexifの表示

    CHCP 65001
    cd "T:\遊馬2のアルバム\"
    exiftool Target.jpg
    • UTF-8で埋め込んでいるので、cmdをUTF-8に変更しないと文字化けします。

    指定したタグのみファイルへ出力

    CD "T:\遊馬2のアルバム\"
    exiftool -csv -IPTC:Keywords -IPTC:Caption-Abstract -charset iptc=latin2 -r -ext jpg . > out.csv
    
    • -r は、サブフォルダのファイルも対象とします。
    • -ext は、指定した拡張子のファイルのみを対象とします。今回は、jpgのみ。
    • EXCELでは、UTF-8で out.csv を開かないと文字化けします。

    キーワードの追加埋め込み

    exiftool -IPTC:Keywords+="Album" -EXIF:XPKeywords+="Album" -Subject+="Album" Target.jpg
    
    • コマンドで直接実行するときは、日本語が使えません。
    • タグ名の後に + で追加出来ます。
    • EXIF:XPKeywordsはエラーで追加されません。リスト形式ではなく、文字列であることが理由のようです。

    タグの全コピー

    exiftool -overwrite_original -tagsFromFile Source.jpg -codedcharacterset=utf8 Target.jpg
    
    • Source.jpgに埋め込まれているタグを全て、Target.jpgにコピーします。
    • -codedcharacterset=utf8 を付けないとIPTCが文字化けします。

    エラーの対処法

    • タグ埋め込みで下記のエラーが表示されることがありました。
      Warning [minor] Fixed incorrect URI for xmlns:MicrosoftPhoto
    • この場合、XMPタグを削除します。
    exiftool -XMP= Target.jpg
    • タグ名の=に何も付けないとそのタグが削除されます。