4 static PyObject* py_hough(PyObject* self, PyObject* args)
6 const unsigned char *image;
23 unsigned char *n_image;
26 if (!PyArg_ParseTuple(args, "(ii)s#dd", &x, &y, &image, &size, &init_angle, &dt)) return NULL;
29 matrix = (int*) malloc(size * sizeof(int));
30 for (i=0; i < x * y; i++) {
36 for (i=0; i < x; i++) {
37 for (j=0; j < y; j++) {
38 if (image[j * x + i]){
39 for (a=0; a < y; a++){
40 distance = (((i - x / 2) * sin((dt * a) + init_angle)) +
41 ((j - y / 2) * -cos((dt * a) + init_angle)) +
43 column = (int) round(distance);
44 if ((0 <= column) && (column < x)){
45 matrix[a * x + column]++;
55 n_image = (char*) malloc(size * sizeof(char));
58 for (i=1; i < x * y; i++){
59 if (matrix[i] < minimum) minimum = matrix[i];
60 if (matrix[i] > maximum) maximum = matrix[i];
62 maximum = maximum - minimum + 1;
63 for (i=0; i < x * y; i++){
64 n_image[i] = (char) ((((float) (matrix[i] - minimum)) / maximum) * 256);
69 result = Py_BuildValue("s#", n_image, size);
74 static PyObject* py_edge(PyObject* self, PyObject* args)
76 const unsigned char *image;
85 unsigned char *n_image;
88 if (!PyArg_ParseTuple(args, "(ii)s#", &x, &y, &image, &size)) return NULL;
90 n_image = (char*) malloc(size);
91 for (i=0; i < 2 * x; i++) {
93 n_image[(y - 2) * x + i] = 0;
95 for (i=0; i < y; i++) {
97 n_image[x * i + 1] = 0;
98 n_image[x * i + x - 2] = 0;
99 n_image[x * i + x - 1] = 0;
104 for (i=2; i < x - 2; i++) {
105 for (j=2; j < y - 2; j++) {
106 sum = image[x * j + i - 2] + image[x * j + i - 1] + image[x * j + i + 1] + image[x * j + i + 2] +
107 image[x * (j - 2) + i - 2] + image[x * (j - 2) + i - 1] + image[x * (j - 2) + i] +
108 image[x * (j - 2) + i + 1] + image[x * (j - 2) + i + 2] +
109 image[x * (j - 1) + i - 2] + image[x * (j - 1) + i - 1] + image[x * (j - 1) + i] +
110 image[x * (j - 1) + i + 1] + image[x * (j - 1) + i + 2] +
111 image[x * (j + 2) + i - 2] + image[x * (j + 2) + i - 1] + image[x * (j + 2) + i] +
112 image[x * (j + 2) + i + 1] + image[x * (j + 2) + i + 2] +
113 image[x * (j + 1) + i - 2] + image[x * (j + 1) + i - 1] + image[x * (j + 1) + i] +
114 image[x * (j + 1) + i + 1] + image[x * (j + 1) + i + 2]
115 - (24 * image[x * j + i]);
116 if (sum < 0) sum = 0;
117 if (sum > 255) sum = 255;
118 n_image[x * j + i] = sum;
124 result = Py_BuildValue("s#", n_image, size);
130 static PyMethodDef myModule_methods[] = {
131 {"edge", py_edge, METH_VARARGS},
132 {"hough", py_hough, METH_VARARGS},
138 (void) Py_InitModule("pcf", myModule_methods);