カウンセリングエンジニア

産業カウンセラーの有資格者が発信します。カウンセリング、マネジメント、Unityあたりの内容多めで構成する予定です

Unityで数種類のエッジ検出を比べてみた(Sobel,Prewitt,Roberts Cross)

始めに

エッジ検出のShaderを書く機会があり調べたところ、
エッジ検出にも様々な手法があることがわかりました。
なので、調べている中でよく見かけた

  • Sobel Filter
  • Prewitt Filter
  • Roberts Cross

のそれぞれの手法での結果を比べてみます。

環境

Unity2018.2.16f1
Scriptable Render Pipelineは未使用

用意

f:id:pond-comfat:20190114171809p:plain

このシーンを元にエッジを検出します

実装

結果

Sobel Filter

f:id:pond-comfat:20190114220607p:plain

Prewitt Filter

f:id:pond-comfat:20190114220655p:plain

Roberts Cross

f:id:pond-comfat:20190114220726p:plain

まとめ

思いの外違いが感じられない結果となりました(^^;)w
上記の中だとRobertsCrossの手法が4点のみのサンプリングで一番負荷が軽そうなので基本的にはRobertsCrossを使った実装を採用しようかなと思います。

参考

UnityのImage EffectでSobelフィルタによるエッジ検出 - Qiita

【Unity】【シェーダ】ソーベルフィルタでエッジを抽出する - LIGHT11

GitHub - keijiro/KinoContour: Contour line filter for Unity