1
0

【C♯】OpenCV で画像がピンボケしているか判定してみる。

Last updated at Posted at 2024-06-25

今回は画像がピンボケしているか
判定してみようと思います。

申し訳ありませんが
判定は甘いかもしれません。

対戦よろしくお願いします。


使用するアルゴリズム

今回使用するアルゴリズムは
「情報量が少ない画像はピンボケしていると判定する」
というものです。

ピンボケしていると
画像の境界線がくっきりしないため
情報量が少なくなるだろうという発想です。

このアルゴリズムは
OpenCV を使用します。

Canny で画像にエッジ検出を行い
FindContoursAsArray で各エッジを取得して
各エッジの Point の数を合計したものが
700 より小さければ
ピンボケしていると判定しています。
ソースコードは下記の通りです。

ピンボケを判定するコード
public static bool isBadImage(string filePath)
{
    using (Mat mat = new Mat(filePath))
    {
        using (Mat Edge_Canny = new Mat())
        {
            Cv2.Canny(mat, Edge_Canny, 10, 410, 3);

            int total = 0;
            foreach (var one in Cv2.FindContoursAsArray(Edge_Canny, RetrievalModes.External, ContourApproximationModes.ApproxSimple))
            {
                total += one.Length;
            }

            return total < 700; //この 700 の数値を下げると判定が厳しくなります。
        }
    }
}

以上ピンボケ画像を判定してみました。

このコードを使用すれば
「ピンボケしている写真を特定のフォルダに入れる」
といったアプリが作成できるかもしれません。

ピンボケしている写真を
特定のフォルダに入れるアプリは
便利だと思う割に少ないように感じますので
狙い目ではないでしょうか?

ピンボケ画像の判定について Google 検索してみると
Python の記事や、昔の記事がヒットします。

いざ入力してみると
エラーが出て動かず苦戦したため
エラーを全て潰した内容を公開することにしました。

この記事を見て
同じ苦戦をしなくて済んだ人が現れたならば
これ以上嬉しいことはありません。

皆さんの開発の助けになれますように
閲覧ありがとうございました。

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0