Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "ipSegmentation.h"
00019
00020
00040 void ipMITKSegmentationSplitContour( float *contour, int sizeContour, float *cutCoords, float *part1, int &size1, float *part2, int &size2 )
00041 {
00042 int cut1, cut2, i=0;
00043 bool cutReached;
00044 size1 = 0;
00045 size2 = 0;
00046
00047 do {
00048 part1[2*size1] = contour[2*i];
00049 part1[2*size1+1] = contour[2*i+1];
00050 i++;
00051 size1++;
00052 cutReached = ( (cutCoords[0]==contour[2*i] && cutCoords[1]==contour[2*i+1]) ||
00053 (cutCoords[2]==contour[2*i] && cutCoords[3]==contour[2*i+1]) );
00054 } while (!cutReached);
00055 cut1 = i;
00056 part1[2*size1] = contour[2*i];
00057 part1[2*size1+1] = contour[2*i+1];
00058 size1++;
00059
00060 do {
00061 part2[2*size2] = contour[2*i];
00062 part2[2*size2+1] = contour[2*i+1];
00063 i++;
00064 size2++;
00065 cutReached = ( (cutCoords[0]==contour[2*i] && cutCoords[1]==contour[2*i+1]) ||
00066 (cutCoords[2]==contour[2*i] && cutCoords[3]==contour[2*i+1]) );
00067 } while (!cutReached);
00068 cut2 = i;
00069 part2[2*size2] = contour[2*i];
00070 part2[2*size2+1] = contour[2*i+1];
00071 size2++;
00072
00073 do {
00074 part1[2*size1] = contour[2*i];
00075 part1[2*size1+1] = contour[2*i+1];
00076 i++;
00077 size1++;
00078 } while (i<sizeContour);
00079 }
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094 bool ipMITKSegmentationIsInsideContour( float *contour, int sizeContour, float x, float y )
00095 {
00096
00097 int i, j;
00098 bool res = false;
00099 for ( i=0, j=sizeContour-1;
00100 i<sizeContour;
00101 j=i++)
00102 {
00103 if (
00104 ( ((contour[2*i+1]<=y) && (y<contour[2*j+1]))
00105 || ((contour[2*j+1]<=y) && (y<contour[2*i+1])) )
00106 &&
00107 ( x < (contour[2*j] - contour[2*i]) * (y - contour[2*i+1]) / (contour[2*j+1] - contour[2*i+1]) + contour[2*i])
00108 )
00109
00110 res = !res;
00111 }
00112 return res;
00113 }
00114