RIGHT:寄稿:東條遼平 * 1次の微分フィルタ [#e064093b] Prewittフィルタに重みづけがされたフィルタです。 #ref(img7.png) これがSobelフィルタの式ですがアルゴリズム的には全くかわりません。 for(i=1; i<img->height-1; i++){ for(j=1; j<img->width-1; j++){ sumrw = sumrh = sumgw = sumgh = sumbw = sumbh = 0; for(k=-1; k<=1; k++){ for(l=-1; l<=1; l++){ sumrw += (!k ? 2*l : l) * img->data[(i+k)*img->width + j + l].r; sumrh += (!l ? 2*k : k) * img->data[(i+k)*img->width + j + l].r; sumgw += (!k ? 2*l : l) * img->data[(i+k)*img->width + j + l].g; sumgh += (!l ? 2*k : k) * img->data[(i+k)*img->width + j + l].g; sumbw += (!k ? 2*l : l) * img->data[(i+k)*img->width + j + l].b; sumbh += (!l ? 2*k : k) * img->data[(i+k)*img->width + j + l].b; } } temp->data[i*temp->width + j].r = sqrt((double)(sumrw*sumrw + sumrh*sumrh)); temp->data[i*temp->width + j].g = sqrt((double)(sumgw*sumgw + sumgh*sumgh)); temp->data[i*temp->width + j].b = sqrt((double)(sumbw*sumbw + sumbh*sumbh)); } } SobelフィルタでもPrewitt同様最後に #ref(img6.png) を計算しています。 - &ref(main.c); - &ref(bitmap.c); - &ref(bitmap.h);