あなたの仕事は、入力画像を取得し、エッジ検出を実行して出力画像になるプログラムを作成することです。
エッジ検出は次のように機能します(不明な場合は、sobelエッジ検出を参照してください)。
- ピクセルの値はピクセルの合計輝度であるため、カラーの場合は、まずグレースケールに変換する必要があります(物事をシンプルかつゴルフ対応にするために、R、G、およびB)。
- ピクセルp (i、j)の G xおよびG yの式は次のとおりです。
- G x = -1 * p (i-1、j-1) -2 * p (i-1、j) -1 * p (i-1、j + 1) + 1 * p (i + 1、j -1) + 2 * p (i + 1、j) + 1 * p (i + 1、j + 1)
- G y = -1 * p (i-1、j-1) -2 * p (i、j-1) -1 * p (i + 1、j-1) + 1 * p (i-1、j +1) + 2 * p (i、j + 1) + 1 * p (i + 1、j + 1)
- そのピクセルのエッジのサイズの値は次のとおりです。√(G x 2 + G y 2)
出力イメージは、各ピクセルのグレースケールとしてのエッジのサイズ√(G x 2 + G y 2)です。
ボーナス:
- ガウスぼかしを実行して、エッジ検出を開始する前に画像を滑らかにし、小さなエッジを削除します。これにより、最終結果に-30%のボーナスが付与されます。
- エッジの角度を考慮してください。同じグレースケール値を取得し、式arctan(G y / G x)から取得した角度を使用してカラーホイールから色を追加することにより、出力ピクセルにある色を与えます。これにより、最終結果に-30%のボーナスが追加されます。
ルール:
- edgepixelsの値を省略して黒に設定するか、画像の外側のピクセルに0を使用します。
- 出力イメージは、ほとんどのコンピューターで開くことができるイメージ形式である必要があります。
- 出力はディスクに書き込むか、ファイルにパイプできる必要があります。
- 入力は、イメージへの相対パスの形式でコマンドライン引数として与えられるか、コマンドラインからパイプで渡されます。
- これはコードゴルフなので、バイト単位の最短コードが勝ちです!
ガウスぼかしを正確に指定できますか?入力グレースケールも、そうでない場合、このエッジ検出をカラー画像にどのように適用する必要がありますか?出力画像は入力とまったく同じサイズですが、入力は内側のピクセルでのみ実行されます(ゼロに設定したピクセルではありません)。
—
flawr
Computerphileのエッジ検出に関するビデオを見ましたか?私はそこで接続の匂いを嗅ぐことができます:)
—
ジャイアントツリー'11
@flawrどのガウスぼかしがエッジ検出に適しているかをテストする必要があるので、何が良い値なのか本当にわかりません。ガウスぼかしの詳細はこちら。入力画像はカラーです。エッジ検出を実行する場合は、まずグレースケールに変換する必要があります。エッジ検出は、A:出力ピクセルの外側の1px境界線を黒に設定するか、B:すべてのピクセルで設定し、画像の外側のピクセルの値として0を使用します。
—
vrwim
@GiantTree noooooooビデオはまったく関係ありません:)
—
vrwim
なぜこれが反対票を投じられたのですか?それは完全に有効な質問のようです。
—
アディソンクランプ