スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

C++で畳み込み演算を実装してみた

自分でフィルタを作ってみようと思った時
OpenCVだとfilter2Dとかいう神関数があるんだけど

それじゃなんというか糞っぽい感じがした

ので自分で畳み込みしてフィルタリングできるように、畳み込みのひな形を作ってみた。

とりあえず畳み込みとは
wikipediaによると、「関数fを平行移動しながらgを重ねて足し合わせること」らしい

実際この通り。

重ねる→乗算
足し合わせる→加算
が連想されるよね

だから h(t) = f(0) * g(t-0) + f(1) * g(t-1) … + f(n) + g(t-n) って感じ?

例題で示すと
f = { 1, 0, 2}
g = { 2, 4, 5, 3, 4}
とかだったら

(わかりやすいようにfの順番を逆転した)
f = { 2, 0, 1}
g =    { 2, 4, 5, 3, 4 }
同じ列にあるものをかけて、足すので
h(0) = 1 * 2 = 2

f = { 2, 0, 1 }
g =  { 2, 4, 5, 3, 4 }
h(1) = 0 * 2 + 1 * 4 = 4

f = { 2, 0, 1 }
g = { 2, 4, 5, 3, 4 }
h(2) = 2 * 2 + 0 * 4 + 1 * 5 = 9

みたいな?f に対してg を動かしていく感じ。

当然画像にフィルタを掛けるために関数を書くので、2次元配列にする
んでもってだいたいのフィルタは3 × 3の配列で収まるので、そんな感じでフィルタを定義することにした。


#include <iostream>
#include <stdlib.h>
#define N 7
using namespace std;
int main(int argc, char *argv[])
{
// フィルタ
float filter[3][3] = {
{ 1, 2, 1 },
{ 2, 4, 2 },
{ 1, 2, 1 }
};
// 畳み込まれる2次元配列
float src[N][N];
for(int i = 0; i < N; i++){
for(int j = 0; j < N; j++){
src[j][i] = rand()%5+1;
}
}
// 結果
float result[N][N];
for(int i = 0; i < N-2; i++){
for(int j = 0; j < N-2; j++){
result[j][i] = 0;
}
}
// 畳み込み
for(int i = 1; i < N-1; i++){
for(int j = 1; j < N-1; j++){
for(int k = -1; k <= 1; k++){
for(int l = -1; l <= 1; l++){
result[j-1][i-1] += filter[l+1][k+1]/16*src[j+l][i+k];
}
cout<<endl;
}
}
}
// 結果の表示
cout<<"result"<<endl;
for(int i = 1; i < N-1; i++){
for(int j = 1; j < N-1; j++)
cout<<result[j-1][i-1]<<" ";
cout<<endl;
}
return 0;
}

あ、いまさらやり直すのはめんどくさいけど、
畳み込みのところで16に割ってるの、フィルタの中の総和を1にしたいから

適当なフィルタかける時はちょっとググってもらいたい
多分このコードでかかってるのはガウシアンフィルタ
スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

Author:おこじょ
FC2ブログへようこそ!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
C++ (7)
カウンタ
広告
ネットショップを始めるなら、ショッピングカートASPサービスの【カラーミーショップ】で決まりです。
カラーミーショップ】を提供しているのは、国内最大級の個人向けホスティングサービス「ロリポップ!レンタルサーバー」で有名な株式会社paperboy&co.になります。paperboy&co.だからこそできる、他社では真似できない『月額875円』という圧倒的な低価格が一番の魅力です。

ご利用店舗数国内No.1の「60,000店」を超えていることが、ショップオーナー様からの安心と信頼の実績を物語っています。
月額875円からという圧倒的な低価格であることに加えて、『無料お試し期間が30日』もあるのは、初めてネットショップをする方にはとっても嬉しいサービスです。利用するかどうかはお試し期間中にじっくり検討できるので、初心者には安心です。
更に、ディスク容量アッププランも用意されているので、将来、本格的にネットショップを運営する場合でも、十分対応できるところが嬉しいです。
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。