Hello, I'm doing an assignment where I need to create a slope/direction field and an intensity map for a given function. I have no problems getting my data, that was quite simple, I have an image that I turn into a matrix and then I use the matrix to do various calculations. What I basically have right now is a results matrix that is split with elements in columns as follows:
Pixels
pixel x (column in image)
pixel y (row in image)
Vector components (i, j, k)
normal i
normal j
normal k
Illumination values (percentages)
Illumination Source 1
Illumination Source 2
Illumination Source 3
So essentially I have a table where you look at your given xy-coordinate and this corresponds to a vector in 3D space, which has a certain intensity value (illumination). The intensity value is for a grayscale image from 0-255, where 255 is the brightest (white) and 0 is the darkest (black). What I'm trying to do now is first take my original image matrix and based on the slope create by the components at (normal i, normal j) I will create a short slope field for that given pixel. Then I want to use the normal i, normal j data to create an intensity map where I will plot (i,j) and then it will be assigned in an intensity.
To give an idea of the intensity map I did a quick search and this is bassically what I want to do: Intensity Map
So my (i,j) will be given a gray value from the illumination source (I can easily do that), I just need help in figuring out how to create these graphs/images.
For the direction field I am essentially looking to create an image like this: Slope Field
I come from a different programming background (MATLAB) so this all boils down to syntax issues and knowledge of C++ functions and libraries (those I do not know so well).
I'll post some sample code of the loop I've used to create my data table. Bear with crazy coding.![]()
So I can find the slope at each pixel and my loop would look something like this:Code:for (int y7 = 0; y7 < in->width; y7++) // Row (y-value) { for (int x7 = 0; x7 < in->height; x7++) // Column (x-value) { if (All_Sphere[y7][x7] == 255) { Counta = Counta + 1; Normal[0][0] = 2 * (Centroid[0][0] - x7); Normal[0][1] = 2 * (Centroid[0][0] - y7); Normal[0][3] = 2 * sqrt(Radius^2 - (Centroid[0][0] - x7)^2 - (Centroid[0][0] - y7)^2); Albedo = sqrt(Normal[0][0]*Normal[0][0] + Normal[0][1]*Normal[0][1] + Normal[0][2]*Normal[0][2]); Normal[0][0] = Normal[0][0]/Albedo; Normal[0][1] = Normal[0][1]/Albedo; Normal[0][2] = Normal[0][2]/Albedo; Ill_1 = (Normal[0][0]*I_SphereVn_1[0][0] (some long code); Ill_2 = (Normal[0][0]*I_SphereVn_2[0][0] (some long code); Ill_3 = (Normal[0][0]*I_SphereVn_3[0][0] (some long code); Table_Sphere_All[Counta][0] = x7; Table_Sphere_All[Counta][1] = y7; Table_Sphere_All[Counta][2] = Normal[0][0]; Table_Sphere_All[Counta][3] = Normal[0][1]; Table_Sphere_All[Counta][4] = Normal[0][2]; Table_Sphere_All[Counta][5] = Ill_1; Table_Sphere_All[Counta][6] = Ill_2; Table_Sphere_All[Counta][7] = Ill_3; } } }
Code:// Needle Map double Slope; for (int i = 0; i < Count; i++) { Table_Sphere_All[i][0]; // x-value Table_Sphere_All[i][1]; // y-value // I need to Plot these points Slope = Table_Sphere_All[i][3] / Table_Sphere_All[i][3]; // Now using this slope, I make a small line at the point, but I'm // not sure how I can do this. // I thought that I could take the value of my pixel and then // subtract 0.1 (get a point), add 0.1 (get a point) and then // have a small plot at each point, and you make slopes that // way. I just need help figuring out how to graph this Graph 1; }And then I want to output these graphs, I think I can get that, I just need to figure out how to plot this.Code:// Intensity Map (I know they can be in the same loop, but separate for this explanation.) int Intensity1; // Will int truncate the value? I would rather have it round the values to an integer. int Intensity2; int Intensity3; for (int i = 0; i < Count; i++) { Table_Sphere_All[i][2]; // normal i Table_Sphere_All[i][3]; // normal j // I need to Plot these points and assign a gray value to them. Intensity1 = Table_Sphere_All[i][5]*255; Intensity2 = Table_Sphere_All[i][6]*255; Intensity3 = Table_Sphere_All[i][7]*255; // Then for my plotted value I assign my intensity, so: Point(normal i, normal j) = Intensity1; // Graph 1 Point(normal i, normal j) = Intensity2; // Graph 2 Point(normal i, normal j) = Intensity3; // Graph 3 // So now I will put this value on the graph. Graph 2 // Intensity 1, since the slope field graph 1, I use graph 2 Graph 3 // Intensity 2 Graph 4 // Intensity 3 }



LinkBack URL
About LinkBacks



