00001
00015 #ifndef _DLRCOMPUTERVISION_DILATE_H_
00016 #define _DLRCOMPUTERVISION_DILATE_H_
00017
00018 #include <dlrComputerVision/image.h>
00019
00020 namespace dlr {
00021
00022 namespace computerVision {
00023
00024 template<ImageFormat FORMAT>
00025 Image<FORMAT>
00026 dilate(const Image<FORMAT>& inputImage);
00027
00028 }
00029
00030 }
00031
00032
00033
00034
00035
00036 #include <cmath>
00037
00038 namespace dlr {
00039
00040 namespace computerVision {
00041
00042 template<ImageFormat FORMAT>
00043 Image<FORMAT>
00044 dilate(const Image<FORMAT>& inputImage)
00045 {
00046 typedef typename Image<FORMAT>::value_type ValueType;
00047
00048 Image<FORMAT> outputImage(inputImage.rows(), inputImage.columns());
00049
00050 size_t index0 = 0;
00051 if(inputImage[0]
00052 || inputImage[1]
00053 || inputImage[inputImage.columns()]
00054 || inputImage[inputImage.columns() + 1]) {
00055 outputImage[index0] = ValueType(1);
00056 } else {
00057 outputImage[index0] = ValueType(0);
00058 }
00059 ++index0;
00060
00061 for(size_t column = 1; column < inputImage.columns() - 1; ++column) {
00062 if(inputImage[index0]
00063 || inputImage[index0 - 1]
00064 || inputImage[index0 + 1]
00065 || inputImage[index0 + inputImage.columns() - 1]
00066 || inputImage[index0 + inputImage.columns()]
00067 || inputImage[index0 + inputImage.columns() + 1]) {
00068 outputImage[index0] = ValueType(1);
00069 } else {
00070 outputImage[index0] = ValueType(0);
00071 }
00072 ++index0;
00073 }
00074
00075 if(inputImage[index0]
00076 || inputImage[index0 - 1]
00077 || inputImage[index0 + inputImage.columns() - 1]
00078 || inputImage[index0 + inputImage.columns()]) {
00079 outputImage[index0] = ValueType(1);
00080 } else {
00081 outputImage[index0] = ValueType(0);
00082 }
00083 ++index0;
00084
00085 for(size_t row = 1; row < inputImage.rows() - 1; ++row) {
00086 if(inputImage[index0]
00087 || inputImage[index0 + 1]
00088 || inputImage[index0 - inputImage.columns()]
00089 || inputImage[index0 - inputImage.columns() + 1]
00090 || inputImage[index0 + inputImage.columns()]
00091 || inputImage[index0 + inputImage.columns() + 1]) {
00092 outputImage[index0] = ValueType(1);
00093 } else {
00094 outputImage[index0] = ValueType(0);
00095 }
00096 ++index0;
00097
00098 for(size_t column = 1; column < inputImage.columns() - 1; ++column) {
00099 if(inputImage[index0]
00100 || inputImage[index0 - 1]
00101 || inputImage[index0 + 1]
00102 || inputImage[index0 - inputImage.columns() - 1]
00103 || inputImage[index0 - inputImage.columns()]
00104 || inputImage[index0 - inputImage.columns() + 1]
00105 || inputImage[index0 + inputImage.columns() - 1]
00106 || inputImage[index0 + inputImage.columns()]
00107 || inputImage[index0 + inputImage.columns() + 1]) {
00108 outputImage[index0] = ValueType(1);
00109 } else {
00110 outputImage[index0] = ValueType(0);
00111 }
00112 ++index0;
00113 }
00114
00115 if(inputImage[index0]
00116 || inputImage[index0 - 1]
00117 || inputImage[index0 - inputImage.columns()]
00118 || inputImage[index0 - inputImage.columns() - 1]
00119 || inputImage[index0 + inputImage.columns()]
00120 || inputImage[index0 + inputImage.columns() - 1]) {
00121 outputImage[index0] = ValueType(1);
00122 } else {
00123 outputImage[index0] = ValueType(0);
00124 }
00125 ++index0;
00126 }
00127
00128 if(inputImage[index0]
00129 || inputImage[index0 + 1]
00130 || inputImage[index0 - inputImage.columns()]
00131 || inputImage[index0 - inputImage.columns() + 1]) {
00132 outputImage[index0] = ValueType(1);
00133 } else {
00134 outputImage[index0] = ValueType(0);
00135 }
00136 ++index0;
00137
00138 for(size_t column = 1; column < inputImage.columns() - 1; ++column) {
00139 if(inputImage[index0]
00140 || inputImage[index0 - 1]
00141 || inputImage[index0 + 1]
00142 || inputImage[index0 - inputImage.columns() - 1]
00143 || inputImage[index0 - inputImage.columns()]
00144 || inputImage[index0 - inputImage.columns() + 1]) {
00145 outputImage[index0] = ValueType(1);
00146 } else {
00147 outputImage[index0] = ValueType(0);
00148 }
00149 ++index0;
00150 }
00151
00152 if(inputImage[index0]
00153 || inputImage[index0 - 1]
00154 || inputImage[index0 - inputImage.columns() - 1]
00155 || inputImage[index0 - inputImage.columns()]) {
00156 outputImage[index0] = ValueType(1);
00157 } else {
00158 outputImage[index0] = ValueType(0);
00159 }
00160 ++index0;
00161
00162 return outputImage;
00163 }
00164
00165 }
00166
00167 }
00168
00169 #endif