画像の部分修正アプリ Inpainter を作りました。
名前の通り Inpaint アルゴリズムを使っています (安直)。
OpenCV と opencv.js の勉強、AI を使わないアルゴリズムの性能確認のために作りました。
不要オブジェクトを削除したこんな画像がサクッと作れます。
注意点としては、分布を調整するだけのアルゴリズムなので、消しゴムマジックのようには使えません。
消しゴムマジックのアプリだと思って使うと、ただの雑コラになるでしょう。
画像にちょっとしたノイズが走っているときに、それをいい感じに消してくれるアプリと思えば、なかなかの精度です。
ただアルゴリズム的には周囲の分布を見ながら消すので、周囲の分布が安定していないとうまく行かない訳です。
周囲の分布をどれくらい考慮するかは radius パラメータで調整できる訳ですが、
普通に考えれば周囲の分布が安定しているかどうかのほうがよほど重要だとわかります。
とはいえ分布ガチャをうまく引けば良い訳ですから、消したい箇所を何度か指定しながら分布を安定化させると、割といい感じの画像になります。
機械学習を用いた場合は分布を既存の知識を使って綺麗にごまかすイメージですが、inpaint アルゴリズムはガチャで分布を綺麗にしてごまかすものだと開き直ると、割と使いやすい気はします。
inpaint のアルゴリズムは cv::photo と cv::xphoto に実装されていますが、
cv::xphoto の inpaint はまだ Wasm ビルドができない感じです。
ちょろっと定義を変えれば動く気はするんですが、こういうときなかなかツライ。
動くようになったら追加予定です。
0 件のコメント:
コメントを投稿