このエントリー
をはてなブックマークに追加
published on in Graphics
tags: FCBI SuperResolution

エッジ判定型超解像アルゴリズム FCBI (Fast curvature based interpolation) おまけ:アルゴリズム改造

はじめに

この記事の続きです。

弱点の部分を改造したら、なんとなく良い結果を得られたので、その説明です。

弱点

勾配のないフラットな塗りに、右下向きの width:1 の線があると補間が崩れます。

テスト画像 ドット拡大表示

改造 take1

v1 と v2 の値が近い時は、単純な Bi-Linear にように4隅を混ぜた方がマシになります。

  • https://github.com/yoya/image.js/blob/v1.3/fcbi.js#L241
    if (Math.abs(v1 - v2) < TM)  { // yoya custom
        var rgba = meanRGBA(meanRGBA(rgba1, rgba4), meanRGBA(rgba2, rgba3));
    } else {
        if (v1 < v2) {
            var rgba = meanRGBA(rgba1, rgba4);
        } else {
            var rgba = meanRGBA(rgba2, rgba3);
        }
    }

結果。

テスト画像 ドット拡大表示

実際のイラストでも線が途切れる箇所が減っています。

元画像 オリジナル 改造版

改造 take2

エッジ判定になっても v1(1-4) と v2(2-3) の差がない時は非エッジとして処理する改造をしたら、いい感じになりました。

  • https://github.com/yoya/image.js/blob/v1.3/fcbi.js#L241

    if (((v1 < TM) && (v2 < TM) && (Math.abs(p1 - p2) < TM)) ||
        (Math.abs(v1 - v2) < TM)) { // yoya custom
        if (edgeMode) {
            var rgba = [0, 128, 0, 255]; // green
        } else {
            // 非エッジの処理
    

  • 結果 (TM:15)

    テスト画像 ドット拡大表示

実際のイラストでも線が途切れる箇所が減っています。

オリジナル 改造 take1 改造 take2

まとめ

  • イラストだとそのままのアルゴリズムより、少し弄って使った方が良いみたいです
  • 非エッジとして処理をしてもエッジが残るように補間されるので、エッジ処理と分けるのは恐らく高速化の為では
  • 分岐がもったいない環境だと、全部非エッジとして処理した方が速いかも。