| 92 | } |
| 93 | |
| 94 | void FeatureKeypoint::Rot90(int k, int width, int height) { |
| 95 | k = k % 4; |
| 96 | if (k < 0) { |
| 97 | k += 4; |
| 98 | } |
| 99 | if (k == 0) { |
| 100 | return; |
| 101 | } |
| 102 | float new_x = x, new_y = y; |
| 103 | float new_a11 = a11, new_a12 = a12, new_a21 = a21, new_a22 = a22; |
| 104 | const float w = static_cast<float>(width); |
| 105 | const float h = static_cast<float>(height); |
| 106 | |
| 107 | if (k == 1) { // 90 CCW |
| 108 | new_x = y; |
| 109 | new_y = w - x; |
| 110 | new_a11 = a21; |
| 111 | new_a12 = a22; |
| 112 | new_a21 = -a11; |
| 113 | new_a22 = -a12; |
| 114 | } else if (k == 2) { // 180 CCW |
| 115 | new_x = w - x; |
| 116 | new_y = h - y; |
| 117 | new_a11 = -a11; |
| 118 | new_a12 = -a12; |
| 119 | new_a21 = -a21; |
| 120 | new_a22 = -a22; |
| 121 | } else if (k == 3) { // 270 CCW |
| 122 | new_x = h - y; |
| 123 | new_y = x; |
| 124 | new_a11 = -a21; |
| 125 | new_a12 = -a22; |
| 126 | new_a21 = a11; |
| 127 | new_a22 = a12; |
| 128 | } |
| 129 | x = new_x; |
| 130 | y = new_y; |
| 131 | a11 = new_a11; |
| 132 | a12 = new_a12; |
| 133 | a21 = new_a21; |
| 134 | a22 = new_a22; |
| 135 | } |
| 136 | |
| 137 | float FeatureKeypoint::ComputeScale() const { |
| 138 | return (ComputeScaleX() + ComputeScaleY()) / 2.0f; |
no outgoing calls