1

黄色の車体を分離してセグメント化し、色を変更しようとしています。そのためには、画像から体を個別に識別する必要があります。そして、残りの白いピクセルを使ってオレーションを続けます。そして、C#を使用しています。ここに計画があります

Color d;
Color newColor = Color.YellowGreen;    
for(inti =0;i<carimage.Width;i++){
    for(intj =0;j<carimage.Height;j++){
        d = carimage.GetPixel(i, j);
            if(d.R == 255 && d.G==255 && d.B == 255)
                image.SetPixel(i, j, newColor );
    }
}

単純なしきい値処理では、車体が正しく分離されていない 2 番目の画像が表示されます。Aforge.net フィル ホール イメージ フィルターを試しましたが、しきい値イメージに大きな変更は加えられていません。カラーフィルターを使用しようとしましたが、ボディの色が異なるため、正しい出力が返されませんでした。誰かがこれを提案して解決できますか?

元の画像

元の画像

閾値画像

閾値画像

4

4 に答える 4

2

しきい値処理の代わりに、クラスタリングを検討することをお勧めします。

簡単なテストとして、HSB空間で画像の明るさを上げました( Mathematica を使用):

brightAdjusted = Image[ Map[#^{1, 1, 0.2} &, ImageData[ColorConvert[img, "HSB"]], {2}], ColorSpace -> "HSB"]

ここに画像の説明を入力

次に、単純な K-Nearest クラスタリングを使用しました。

(clusters = ClusteringComponents[ColorConvert[brightnessAdjusted, "RGB"], 3, Method -> "KMeans"]) // 色付け

ここに画像の説明を入力

画像内の類似した色のクラスターを見つけます (おそらくもっと適切なクラスター化アルゴリズムがもっとたくさんあるので、少し実験する必要があります)。次に、クラスターの 1 つで色を調整します。

Image[MapThread[If[#1 == 2, #2[[{1, 3, 2}]], #2] &, {クラスター, ImageData[brightnessAdjusted]}, 2]]

ここに画像の説明を入力

しきい値処理を使用する場合は、おそらくCIE 色空間を使用する必要があります。これは、その色空間のユークリッド距離が人間の知覚に近いためです。

于 2011-11-15T12:11:13.210 に答える
0
    I=imread('test.jpg'); 
    I=im2double(rgb2gray(I)); 
    BW=im2bw(I,0.64);imshow(BW)

私に与えます:

画像

画像のヒストグラムを見て、0.64 のしきい値を取得しました。MATLAB を使用して画像処理を行うことをお勧めします。画像を着色するのに役立つことを願っています。

于 2012-12-09T00:26:32.403 に答える
0

数年前に同様のプロジェクトがありました。正確な詳細を思い出せませんが、イメージ上で (小さすぎない) スライディング ウィンドウをシフトし、各位置のウィンドウ内の平均強度 (おそらく R、G、B について) を計算するというアイデアでした。これらの平均値を「しきい値画像」に入力し、元の画像から差し引きました。どこかにスケーリング係数やその他の調整がありましたが、要点は、そのようなアプローチは一定のしきい値を使用するよりもはるかに優れていたということです.

于 2011-11-15T00:14:08.023 に答える
0

一連のしきい値を使用する場合は、色相彩度値カラースペースで黄色の色相を選択する方がよい場合があります。関連するSO の質問を参照してください。

于 2011-11-15T11:18:30.410 に答える