/************************************************** average.cc 平均値フィルター処理 ***************************************************/ vs_module average(iImage data) { // テンポラリ変数 iImage shadow(data); // 径1の外周(全領域中での)は処理からはずす vsSetBoundary2D(1); // 並列処理開始(弱一貫性モデル) parallel(x,y) { shadow[][] = (data[-1][] + data[][-1] + \ data[+1][] + data[][+1]) / 4; } // 大域変数にコピー ImgCopy(data,shadow); }
/**************************************** filter.vpe フィルター処理起動用スクリプト ****************************************/ // 通信処理初期化 ------------- #pragma host_name host1 #pragma host_name host2 #pragma host_name host3 #pragma host_name host4 // データの初期化 ------------- imgLoad("./toy.pgm", data); set(data, CACHE, 1); module("average", data); // 保存するためにデータを回収 gather(data); imgSave("result.pgm", data);
parallel(x,y) { shadow[][] = (data[-1][] + data[][-1] + data[+1][] + data[][+1]) / 4; }基本プログラム(反転フィルタ)でも述べたように、shadow[][]の引数なしの大括弧"[ ]"は現在の注目画素をしめす。