2017-03-20 5 views
0

私は街並みの画像で建物の輪郭を検出しようとしています。結果は、ポスターに見えるものに似ているはずです。空は白く、建物は黒く塗りつぶされています。これは一般的なエッジ検出とは異なり、画像全体でエッジを検出します。CIImageを使用した「内部」(エッジのような)検出?

私は空の全体が洗い流されるように画像のコントラストを上げることでこれを達成しようとしています。私はその後、CIFilterを使用して結果にエッジ検出を実行しようとしていました。私はまだこれがうまくいくと思っていますが、それは私にとって迷惑です。

私がさらに進む前に、誰かがこれのプレロールバージョンを知っていますか?ので、ここで

答えて

0

OK]をクリックして...私はこれを解決する方法であるグレースケール画像にそれを回すためにCIImageを使用して

スタート。私はノワールを使用しました。なぜなら、よりコントラストのあるイメージを作り出すように見えたからです。

Iは、結果は黒画素が内装された状態で、純粋な黒と白の画像である5

のコントラストを向上するために、第2のフィルタを適用しました。

0

あなたの問題を偶然見つけました。

Appleが提供するフィルタを使用すると、私が選ぶのが好きな方法を最初に紹介しましょう。 https://developer.apple.com/library/content/documentation/GraphicsImaging/Conceptual/CoreImaging/ci_custom_filters/ci_custom_filters.html#//apple_ref/doc/uid/TP30001185-CH6-BCICGCJF

あなたがそれらを得た場合は、「クォーツコンポーザー」を探します。ここではドキュメントに彼らのために見てください -

Appleは、「Xcodeのためのグラフィックツール」にバンドルされ、特定のグラフィックツールを持っています。 使用ここでは、この偉大な紹介: https://developer.apple.com/library/content/documentation/GraphicsImaging/Conceptual/QuartzComposerUserGuide/qc_tutorial/qc_tutorial.html

あなたの画像後処理を最大限ので、チェーンに必要なすべて(アップルが提供する)フィルタです。 私はこの方法が気に入っています。これは、コード内のフィルタパラメータを使って遊んでいるよりも速いので - 再コンパイルしてビルドして実行してください。

良い結果が得られたら、(設定されたパラメータを使用して)フィルタをcode et voilaに翻訳してください。あなたはすべてセットアップされています。

あなたの基本的な考え方に戻ってください。画像上でコントラスト強調と最終的なエッジ検出を行うこと。これはどのように見えますか(パラメータに私を釘付けにしないでください)

CIImage *outputImage = ciImage; 
// Your Idea to enhance contrast. 
CIFilter *ciColorMonochrome = [CIFilter filterWithName:@"CIColorMonochrome"]; 
[ciColorMonochrome setValue:outputImage forKey:kCIInputImageKey]; 
[ciColorMonochrome setValue:@(1) forKey:@"inputIntensity"]; 
[ciColorMonochrome setValue:[[CIColor alloc] initWithColor:[UIColor whiteColor]] forKey:@"inputColor"];// Black and white 
outputImage = [ciColorMonochrome valueForKey:kCIOutputImageKey]; 

// Now go on with edge detection 
CIImage *result = [filter valueForKey:kCIOutputImageKey]; 
CIFilter *ciEdges = [CIFilter filterWithName:@"CIEdges"]; 
[ciEdges setValue:outputImage forKey:kCIInputImageKey]; 
[ciEdges setValue:@(5) forKey:@"inputIntensity"]; 
outputImage = [ciEdges valueForKey:kCIOutputImageKey]; 
関連する問題