Glaucoma is an eye disease in which the optic nerve is damaged in a characteristic pattern. This can permanently damage vision in the affected eye(s) and lead to blindness if left untreated. Early detection and regular monitoring are essential to achieve optimal care for glaucoma patients. One important tool is the visual field (VF) exam, a functional test that is part of the standard of care for diagnosis and evaluation of glaucoma. It is performed regularly in the management of glaucoma. While the VF exam is sensitive to detect and monitor the disease, it is, unfortunately, subjective, time-consuming and often unreliable. To offset these limitations, Fourier domain optical coherence tomography (OCT) has recently been introduced to provide important structural information about the posterior segment of the eye. This structural evaluation by OCT has been shown to be objective, efficient, and reliable. The known anatomic correspondence is that the top part of VF corresponds to the bottom part of the eye, as scanned by OCT, and vice versa.
In this problem you will be asked to predict VF test result based on OCT macular thickness map.
Visual Field Map
The VF test maps the patient���s central and peripheral visual function based on his or her response (e.g., pressing a button) to seeing a flashing light of varying intensities presented at predetermined locations. The most common VF test has 54 test locations within the central 24 degrees of the field of view.
At the conclusion of the exam, the patient���s responses are analyzed statistically and compared to a normative database to generate a detailed map (conventionally presented in units of decibels) noting the areas of VF defect. Locations labeled with negative values correspond to areas where the patient performed below the expected norm. The exponential magnitude of these negative values reflects how far below the norm the patient performed at the corresponding location. Similarly, VF locations labeled with positive values correspond to locations where the patient performed above the expected norm. Each eye is tested separately, yielding two VF maps for each patient. Only the central subset of the VF test locations which overlaps with the portion of the macula captured by the OCT is utilized in our problem. This subset of VF points, in relationship to the entire 54 locations, is encircled in green as shown in the figure below. After excluding the blind spot (blue areas shown in figure), each of these VF maps contains a total of 34 data points. For convenience, the points are numbered with integers 0 to 33.
OCT Macular Thickness Map
OCT is an emerging imaging modality based on the principles of low-coherence interferometry. With spectrometer detection method and a Fourier transform algorithm, Fourier domain OCT can perform 26,000 A-scans in the macula in one second. Each map generated consists of a 6 mm x 6 mm grid centered on the fovea, with spacing of 0.25���0.5 mm within the grid, and a depth resolution of 5 μm. In general, each map consists of a set of points scanned and macula thickness values at these points.
The figures below show several examples of OCT macular thickness maps. Of those 3 figures, only the leftmost one corresponds to a healthy patient. The middle OCT is thin for the bottom part of the eye, thus top VF values are expected to be negative. The rightmost OCT seems to be thin for the whole eye, however you can see that the top part is still thicker then the bottom one, so this case is similar to the previous one and again only top VF values are expected to be negative. Some sort of heights normalization may be useful to deal with cases like the last one.
Your task is to return your best guess for the VF exam result based on the given OCT macular thickness map.
You should implement one method getVisualFieldMap, which takes 3 double-s as arguments: x, y and h. They describe the given OCT thickness map. For each i, x[i] and y[i] are the coordinates of the point where a scan is done and h[i] is the thickness value obtained at this point. Both X and Y coordinates range 0.0 to 6.0 or -3.0 to 3.0 (depending on a particular test case). The heights are guaranteed to be between -300.0 and 700.0. Too big or too small (including negative) heights are imaging artifacts (because the eye is curved and the scan is flat, errors can happen at the border).
Your program must return a double containing exactly 34 values, where the i-th element is the predicted VF value at location numbered i. Each returned value must be between -50.0 and 50.0, inclusive.
Testing and scoring
Your score for a single test case is calculated as follows. If your program doesn't return a double containing exactly 34 values in -50..50, the score will be 0. Otherwise let MAE be the mean absolute error between your return and correct answer. The score will be calculated as 1000.0 - 10.0 * MAE.
Your overall score will simply be the sum of scores on each single test case.
The test data consists of 145 OCT/VF pairs. 56 of them are provided to you for download. The example tests are chosen uniformly, at random, from these pairs. The folder OCT contains inputs. Each file is in TSV format, where each line contains 3 tab-separated doubles: x, y and h. The folder VF contains expected answers. Each line of each file contains a single VF value. The values are listed in the same order as VF locations are numbered.
45 pairs are used for submission tests and remaining 44 pairs are used for system tests. The split of data into training/submission/system tests was made by an expert in glaucoma. The goal was to present approximately the same ratio of healthy patients and of patients with different kinds of defects within each of these 3 groups.
The described problem was already studied by some scientists. Below you can find links to 3 articles directly related to this problem. You can use this information to develop/improve your algorithm.
In order to receive the prize money, you will need to fully document the derivation of all parameters internal to your algorithm. If these parameters were obtained from the training data set, you will also need to provide the program used to generate these training parameters. There is no restriction on the programming language used to generate these training parameters. Note that all this data should not be submitted anywhere during the coding phase. Instead, if you win a prize, a TopCoder representative will contact you directly in order to collect this data.
|-||The match forum is located here. Please check it regularly because some important clarifications and/or updates may be posted there. You can click "Watch forum" if you would like to receive automatic notifications about all posted messages to your email.|
|-||The memory limit is 2048 MB and the time limit is 1 minute per test case (which includes only time spent in your code).|
|-||There is no explicit code size limit. The implicit source code size limit is around 1 MB (it is not advisable to submit codes of size close to that or larger). Once your code is compiled, the binary size should not exceed 1 MB.|
|-||The compilation time limit is 30 seconds. You can find information about compilers that we use and compilation options here.|
|-||The processing server specifications can be found here.|
This problem statement is the exclusive and proprietary property of TopCoder, Inc. Any unauthorized use or reproduction of this information without the prior written consent of TopCoder, Inc. is strictly prohibited. (c)2020, TopCoder, Inc. All rights reserved.