C++でOpenCVを使わずにハフ変換による直線検出を行いたいが(ρ、θ)空間への変換からうまくいかないです

実現したいこと

C++でOpenCVを使わずにハフ変換による直線検出を行いたい

前提

ハフ変換の原理に関しては以下のように理解しています。
1.(x、y)空間から対象の画素を検出
2.その画素に対して以下の式を用いて(ρ、θ)空間へ投票、θを1度ずつ動かし一つの点に対し360°カバーする
ρ=xcosθ+ysinθ
3.対象の画素すべてで投票を終え、最も投票された(ρ、θ)を用いて直線を描画

ソースコードは2番までです。
visual studio 2022
image->sizeX,Yは画像のサイズ
image->data[y][x].rは座標(x、y)のREDの画素値を表しています(二値化画像なのでr=g=b)

発生している問題・エラーメッセージ

関数はスタックの’2160060’バイトを使用します。データの一部をヒープに移動することを考慮してください。

該当のソースコード

C++

1void hough(RGBImage* image) { //引数に二値化画像を用意2 const double PI = 3.1415926535;3 const int theta_max = 360;4 const int rho_max0 = 750; //画像サイズは512*5125 const int rho_max2 = rho_max0 * 2;6 int count[rho_max2][theta_max];7 8 for (int rho = 0; rho < rho_max2; rho++) { //カウンタの初期化9 for (unsigned int theta = 0; theta < theta_max; theta++) {10 count[rho][theta] = 0;11 }12 }13 14 for (int y = 0; y < image->sizeY; ++y) { //入力画像を左上から検索15 for (int x = 0; x < image->sizeX; ++x) {16 17 if (image->data[y][x].r >= 100) { //画素値が255だったらハフ変換してその値に投票18 for (int theta = 0; theta < theta_max; theta++) {19 double theta_rad = (double)theta * PI / 180.0;20 21 int rho = (int)(x * cos(theta_rad) + y * sin(theta_rad) + rho_max0);22 printf_s("%d %d", rho, theta); //実際の値の確認用23 count[rho][theta]++;24 }25 }26 }27 }28}

試したこと

補足情報(FW/ツールのバージョンなど)

コメントを投稿

0 コメント