Jpegはサブサンプリングしても輪郭の座標によってくっきりするのではないか

サブサンプリング(クロマサンプリング)は、カラーモデルの変換だけをした後にCrCbだけを縦横2また4ピクセルでサンプリングするので、`偶数または4の倍数ぴったりの座標に平面同士の境界線があるとくっきり見えるのではないか？`

…と、ふと思ったのですがどうもそうではないようです。

# 元画像と処理の流れ

<table class="table table-striped table-bordered">
  <thead>
    <th>
      4の倍数+0
    </th>
    <th>
      4の倍数+1
    </th>
    <th>
      4の倍数+2
    </th>
    <th>
      4の倍数+3
    </th>
  </thead>
  <tbody>
    <tr>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/src/rectangle0.png" />
      </td>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/src/rectangle1.png" />
      </td>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/src/rectangle2.png" />
      </td>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/src/rectangle3.png" />
      </td>
    </tr>
  </tbody>
</table>

* 24x24のPNG画像。
* 左上から12ピクセルから15ピクセルまでの緑の矩形を配置(4の倍数+0〜+3)。
* ImageMagickでJpegに変換。サブサンプリングだけ見たいので品質は100。
  * `convert 元ファイル.png -quality 100 -sampling-factor '4:4:4' 変換ファイル.jpg`
* 結果のJpegファイルを見やすいように2×2に拡大してPNGに変換したものが以下です。
  * `convert 変換ファイル.jpg -sample 200% 表示ファイル.png`
* ImageMagickのバージョンは `Version: ImageMagick 7.0.8-12 Q16 x86_64 2018-09-23 https://imagemagick.org`
  * macOSのHomebrewでインストールしました。

# 結果

* `4:4:4`はサブサンプリングをしないので境界線がくっきりしています。
* `4:2:2`は横2ピクセル、`4:1:1`は横4ピクセルでサンプリングするので、`4:1:1`の方が輪郭がぼけて見えます。いずれも水平な境界線はくっきりしています。
* `4:2:0`は縦横2ピクセルでサンプリングするので水平の境界線もぼやけます。

意図した通りに変換できたと思います。

<table class="table table-striped table-bordered">
  <thead>
    <tr>
      <th>
        輪郭の座標
      </th>
      <th>
        4の倍数+0
      </th>
      <th>
        4の倍数+1
      </th>
      <th>
        4の倍数+2
      </th>
      <th>
        4の倍数+3
      </th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>
        4:4:4
      </th>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/scale2/rectangle0-444.png" />
      </td>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/scale2/rectangle1-444.png" />
      </td>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/scale2/rectangle2-444.png" />
      </td>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/scale2/rectangle3-444.png" />
      </td>
    </tr>
    <tr>
      <th>
        4:2:2
      </th>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/scale2/rectangle0-422.png" />
      </td>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/scale2/rectangle1-422.png" />
      </td>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/scale2/rectangle2-422.png" />
      </td>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/scale2/rectangle3-422.png" />
      </td>
    </tr>
    <tr>
      <th>
        4:2:0
      </th>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/scale2/rectangle0-420.png" />
      </td>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/scale2/rectangle1-420.png" />
      </td>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/scale2/rectangle2-420.png" />
      </td>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/scale2/rectangle3-420.png" />
      </td>
    </tr>
    <tr>
      <th>
        4:1:1
      </th>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/scale2/rectangle0-411.png" />
      </td>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/scale2/rectangle1-411.png" />
      </td>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/scale2/rectangle2-411.png" />
      </td>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/scale2/rectangle3-411.png" />
      </td>
    </tr>
  </tbody>
</table>

# よくわからないところ

言及もなくお手上げでした。今後の課題にします。

* 境界線の座標にかかわらず輪郭がぼやけること。
* モアレが発生すること。DCTの影響という気もしますが。

# おまけ: グレースケールの場合

輝度のサンプリングはないので輪郭がぼやけないことを体感。

<table class="table table-striped table-bordered">
  <thead>
    <tr>
      <th>
        輪郭の座標
      </th>
      <th>
        4の倍数+0
      </th>
      <th>
        4の倍数+1
      </th>
      <th>
        4の倍数+2
      </th>
      <th>
        4の倍数+3
      </th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <th>
        4:4:4
      </th>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/scale2/grectangle0-444.png" />
      </td>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/scale2/grectangle1-444.png" />
      </td>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/scale2/grectangle2-444.png" />
      </td>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/scale2/grectangle3-444.png" />
      </td>
    </tr>
    <tr>
      <th>
        4:2:2
      </th>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/scale2/grectangle0-422.png" />
      </td>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/scale2/grectangle1-422.png" />
      </td>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/scale2/grectangle2-422.png" />
      </td>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/scale2/grectangle3-422.png" />
      </td>
    </tr>
    <tr>
      <th>
        4:2:0
      </th>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/scale2/grectangle0-420.png" />
      </td>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/scale2/grectangle1-420.png" />
      </td>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/scale2/grectangle2-420.png" />
      </td>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/scale2/grectangle3-420.png" />
      </td>
    </tr>
    <tr>
      <th>
        4:1:1
      </th>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/scale2/grectangle0-411.png" />
      </td>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/scale2/grectangle1-411.png" />
      </td>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/scale2/grectangle2-411.png" />
      </td>
      <td>
        <img class="img-responsive" src="https://www.ideamans.com/_themes/jpeg-subsampling/scale2/grectangle3-411.png" />
      </td>
    </tr>
  </tbody>
</table>