LaplacianフィルタはPrewittやSobelフィルタと同じく微分フィルタですが,これは2次の微分フィルタとなっています.
Laplacianフィルタは上のようになります.また,これは次の式に相当します.
1次微分とどちらがいいかという訳ではありませんが, 2次微分の方が細かくエッジを抽出してくれるようです.
for(i=1; i<img->height-1; i++){ for(j=1; j<img->width-1; j++){ sumr = sumg = sumb = 0; for(k=-1; k<=1; k++){ for(l=-1; l<=1; l++){ if(!k && !l) weight = -4; else if(!k || !l) weight = 1; else weight = 0; sumr += weight * img->data[(i+k)*img->width + j + l].r; sumg += weight * img->data[(i+k)*img->width + j + l].g; sumb += weight * img->data[(i+k)*img->width + j + l].b; } } temp->data[i*temp->width + j].r = abs((double)sumr); temp->data[i*temp->width + j].g = abs((double)sumg); temp->data[i*temp->width + j].b = abs((double)sumb); } }
係数が違うだけでアルゴリズム自体はPrewittやSobelフィルタと同じです.