これは問題になるでしょう。画像をピクセル化する方法はたくさんあります。単一の方法でも、任意に回転させることができます。理論的には、この回転は Hough のようなメソッドに影響を与えるべきではありませんが、実際には、任意の角度で完全にラスタライズされた線を作成することはできないため、影響を受けます。私のアプローチは単純化されており、毎回うまくいくわけではありません (ほとんどの場合失敗するでしょう)。ユーザーに「あなたの画像はピクセル化されています。私はそれを望んでいません」と言いますか? やりたいことが明確でない、範囲も明確でない。
だからここにアプローチがあります。画像をカラー チャネルに分割します。例の 1 つはパレット GIF ですが、RGB 画像として簡単に見ることができます。グレースケールの場合は、ほとんどの場合、1 つのチャネルが必要です。それで問題ありません。画像にアルファ チャネルがある場合は、ブレンドするか無視します。この分離されたカラー チャネルを使用して、それぞれにモルフォロジー グラデーションを適用し、それぞれを Otsu で 2 値化し (自動であり、比較的良好であり、簡単に入手できるため)、n 個のバイナリ チャネルを加算して 1 つに結合します。形態学的勾配は、強いエッジ (ノイズを含む) に対して高い応答を示し、2 値化ステップはそれらを維持します。次に、小さすぎるコンポーネントを削除し、間引きを行って 1 ピクセル幅のエッジを取得します。これらの手順を実行した後、サンプル画像で得られるものは次のとおりです。
f = Import["http://www.caughtinthefire.com/wp-content/uploads/2009/03/\
fireworks-pixelate-02.gif"]
split = Binarize[ImageSubtract[Dilation[#, 1], Erosion[#, 1]]] & /@
ColorSeparate[f, "RGB"]
thin = Thinning[SelectComponents[Fold[ImageAdd, split[[1]], split[[2 ;;]]],
"Count", # > 10 &]]
次に、この細線化されたバイナリ イメージの線を検出します。画像がピクセル化されると、多くの長方形の領域が形成されることが期待されますが、これらの長方形の領域を実際に形成できるという保証はありません。できると仮定すると、これらの各領域を接続されたコンポーネントと見なすことができます。次に、単純成分分析を次のように実行すると、凸包の面積と境界ボックスの面積の比率がある値よりも大きい場合、この面積は長方形の面積になります。長方形の領域が多くなる場合は、画像がピクセル化されていると言います (しかし、実際にはそのようなことを言う自信はありません)。次に、検出された線が重ねられた元の画像が表示されます。右側には、比率 > 95% を使用して前述の分析を検討した後に残っている連結成分 (黒ではない点) が表示されます。この場合、合計で 542 個の接続されたコンポーネントがあり、483 個に減少しました。これは、コンポーネントのほぼ 90% が長方形であることを意味します。残りのコンポーネントの領域を考慮したり、この分析を他の分析と組み合わせたりすることもできますが、ここでは行いません。
lines = ImageLines[thin, 0.05, Method -> "RANSAC"];
Show[f, Graphics[{Thick, Blue, Line /@ lines}]] (* The left image above. *)
blank = Image[ConstantArray[255, Reverse@ImageDimensions[thin]]];
blankcc = ImagePad[Binarize[Image[Show[blank,
Graphics[{Thick, Black, Line /@ lines}]]]], 1, Black]
ccrect = SelectComponents[MorphologicalComponents[blankcc], {"BoundingBoxArea",
"ConvexArea"}, #2/#1 > 0.95 &];
Colorize[ccrect, ColorFunction -> "DarkRainbow"] (* The right image above. *)
これは、「ピクセル化」の兆候です。
他の画像を考慮した他の結果を次に示します。これは常に、次の順序で 3 つの画像のシーケンスです: オリジナル、何も変更しない上記の結果、線検出のしきい値を変更した後の上記の結果。
すべてが長方形として検出されました。しかし、ここではライン検出のしきい値が0.05
高すぎます。それを下げてから0.01
、コンポーネントをより適切に分割します。
次に、予想外の画像を検討します。そのため、コンポーネントはほとんどありません。より多くの長方形コンポーネントを提供するライン検出のしきい値がないため、3 番目のイメージは空です (または、コンポーネントが残っていないため、完全に黒になります)。
最後に、正方形を回転させたピクセレーションです。次の画像を生成するプロセスは、サンプル画像で使用されているものとは異なる可能性がありますが、私は作成者ではないのでわかりません。右の画像は、ラインのしきい値を に上げた結果です0.08
。ここでの問題は、領域が比較的大きいことです。これは、ピクセル化された画像の検出には考慮しません。