答えで探しているものが混乱しています。
std::vector< std::vector<double> > new_image;
std::vector<double> filter;
filter.push_back(-1.0); filter.push_back(0.0); filter.push_back(1.0);
for(int i = 0; i < image.size(); i++){
for(int j = 0; j < image.at(i).size(); j++){
new_image.at(i).push_back(filter.at(0)*image.at(i).at(j-1)
+ filter.at(1)*image.at(i).at(j)
+ filter.at(2)*image.at(i).at(j+1));
}
}
:私たちはあなたのフィルタが
filter
と呼ばれる
std::vector<double>
に格納されており、あなたのイメージが本当に2Dであると
image
と呼ばれる
std::vector< std::vector<double> >
型を持つこと、そして私たちは、次は、1-Dフィルタ
[-1,0,1]
を適用するために行うことができますという仮定をした場合あなたが例えば
[0 1 0]
[1 0 1]
[0 1 0]
をこのような2次元フィルタを持つようにしたい場合は
は、我々はそれが同様にベクトルのベクトルとして保存されていると仮定して、基本的には同じことを行います。
std::vector< std::vector<double> > new_image;
for(int i = 0; i < image.size(); i++){
for(int j = 0; j < image.at(i).size(); j++){
top_filter_term = filter.at(0).at(0)*image.at(i-1).at(j-1)
+ filter.at(0).at(1)*image.at(i-1).at(j)
+ filter.at(0).at(2)*image.at(i-1).at(j+1);
mid_filter_term = filter.at(1).at(0)*image.at(i).at(j-1)
+ filter.at(1).at(1)*image.at(i).at(j)
+ filter.at(1).at(2)*image.at(i).at(j+1);
bot_filter_term = filter.at(2).at(0)*image.at(i+1).at(j-1)
+ filter.at(2).at(1)*image.at(i+1).at(j)
+ filter.at(2).at(2)*image.at(i+1).at(j+1);
new_image.at(i).push_back(top_filter_term + mid_filter_term + bot_filter_term);
}
}
注意してください - 私は、フィルタアレイの境界チェックを行うためのあらゆる努力をしていないよ、あなたは本当にあなただけの画像のエッジから離れてこれを適用する、または適用するためにコードを追加する必要がありますどのようなフィルタに必要な境界条件の種類。私はまた、これが最適化されているという主張はしていません。ほとんどの場合、ベクトルの使用は、動的にサイズ変更が可能で、多くの便利な画像操作を行うのに十分なビルトインサポートを提供するため、良い方法です。しかし、実際に大規模な処理を行うには、フィルター操作のようなものを最適化する必要があります。
3Dアレイをフィルタリングする方法については、考慮すべき点が2つあります。 1つは、実際に配列全体をフィルタリングする必要があることを確認してください。多くの画像処理タスクでは、すべてのカラーチャンネルをそれぞれの2D配列に分割し、処理してから戻す方が効率的です。真の3Dフィルタが必要な場合は、フィルタが実際に3Dであることを確認します。つまり、ベクトルのベクトルのベクトルになります。次に、上記とまったく同じロジックを使用しますが、画像の各カラーチャンネル、つまり「スライス」に適用されるフィルタの部分の用語を追加します。
出典
2012-04-04 01:11:19
ely
[[0、1、0] 'フィルタは、異なる値が_colors_を表す場合を除いて、識別変換になります[ElKamina suggests](http://stackoverflow.com/a/10003402/377270)、またはその他の情報が欠落しています。 – sarnold
私は例としてその1つを与えました、私が使用したいと思う主なフィルターは[-1,0,1] – Ali