Pull to refresh

Comments 9

Это приводит к тому, что в моем методе не нужны ни код на OpenCL или CUDA, ни шейдеры.
Очень грустно. Потому что у меня под рукой только МакОСь и Линукс, а на них нет ДиректИкса.
Абсолютно то же самое можно сделать OpenGL. Кстати, изначально я и планировал использовать OpenGL, причем в его мобильной реализации. Но для проверки метода написал сначала на DirectX.
UFO just landed and posted this here
Paul V.C. Hough — держатель патента 1962 года, описывающего то, что сейчас называется «пространство Хафа».
UFO just landed and posted this here
Спасибо за дополнение, сам я ту ссылку прочитал через строчку, и как-то даже не заметил ничего про частицы и ускорители. Вообще, конечно, любые ИТ-штуки интересны и важны именно своим применением в материальном мире.
Могли бы и код привести…

Хотя бы что-нибудь вроде этого:
__global__ void fill_lin_hough_array(float *ima_d,
						int imW, int imH,
						float min, float max,
						float *Sin_d, float *Cos_d,
						int Rmax, int angles, float treshold,
						float *hough_d){
	int xi = blockIdx.x * blockDim.x + threadIdx.x;
	int yi = blockIdx.y * blockDim.y + threadIdx.y;
	int i = xi + imW * yi;
	float x = (float)xi;
	float y = (float)yi;
	int k, R;
	if(xi >= imW || yi >= imH) return;
	float wd = max-min; if(wd == 0.f) wd = 1.f;
	float ima = (ima_d[i]-min)/wd;
	if(ima > treshold){
		for(k = 0; k < angles; k++){
			// R = x*cos(theta) + y*sin(theta)
			R = (int)(0.5f + x * Cos_d[k] + y * Sin_d[k]);
			// THIS IS VERY BAD, BUT atomicAdd doesn't work in old devices
			if(R > 0 && R < Rmax) hough_d[R + Rmax*k] += ima;
			//if(R > 0 && R < Rmax) atomicAdd(&hough_d[R + Rmax*k], ima);
		}
	}
}
Как раз подобного кода и не нужно. Выборку точек и суммирование значений в аккумуляторе выполняет видеокарта при рендеринге. Кстати, можете посмотреть исходники по ссылке.
У Вас используется DirectX, т.е. код будет работать только в windows.
А вот openCL или CUDA дают уже более переносимый код.
Sign up to leave a comment.

Articles