Sobelフィルタでエッジ抽出する の変更点


 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);
 
Valid XHTML 1.1! home > コンピュータ > プログラミング >
リロード   新規 編集 差分 添付 複製 改名   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS
Modified by 物理のかぎプロジェクト PukiWiki 1.4.5_1 Copyright © 2001-2005 PukiWiki Developers Team. License is GPL.
Based on "PukiWiki" 1.3 by yu-jiPowered by PHP 5.3.29HTML convert time to 0.002 sec.