| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- APP
- SERIAL
- Pointer
- Binary
- file access
- Gradient
- Gaussian
- c++
- Android
- atmega328
- parameter
- Class
- flutter
- UNO
- edge
- Read
- public
- sensor
- mfc
- subpixel
- Unity
- stream
- compare
- Encapusulation
- digitalRead
- aduino
- wpf
- Contour
- memory
- Filtering
- Today
- Total
폴크(FOLC)
치수 계산하기 - edge score 본문
Gradient 기반 신뢰도 스코어링(gradient-based edge confidence scoring)**은 검출된 edge가 진짜 edge인지 아닌지를 판단하거나 subpixel edge의 신뢰도를 정량화할 때 매우 유용한 기법으로, CD 측정, 자동 edge 선택, 노이즈 필터링 등에 적용된다.
Gradient magnitude : edge의 "강도(strength)" 또는 "확신도(confidence)"로 해석 가능
강한 edge : 큰 gradient → 확실한 밝기 변화 → 진짜 edge일 가능성 높음
약한 edge : 작은 gradient → noise, blur, 혹은 경계 아님
Confidence = |I(x+1) - I(x-1)| / 2 = |Gradient|
스코어링 기준값 예시
| ≥ 20.0 | 매우 강한 edge | CD 측정에 사용 가능 |
| 10 ~ 20 | 보통 수준 | 조건부 사용 가능 |
| < 10.0 | 약한 edge | 필터링 필요 가능성 높음 |
예제
struct EdgePoint {
float position; // subpixel 위치
float confidence; // gradient magnitude
EdgeDirection direction; // 양/음 gradient
};
vector<EdgePoint> detectEdgesWithConfidence(const vector<float>& profile) {
vector<EdgePoint> edges;
for (int i = 1; i < profile.size() - 1; ++i) {
float g_prev = profile[i - 1];
float g_curr = profile[i];
float g_next = profile[i + 1];
// gradient magnitude = edge confidence
float gradMag = fabs(g_next - g_prev) * 0.5f;
// edge candidate (local max/min in gradient)
if ((g_curr > g_prev && g_curr > g_next) || (g_curr < g_prev && g_curr < g_next)) {
float offset = parabolaSubpixelOffset(g_prev, g_curr, g_next);
EdgeDirection dir = (g_next - g_prev > 0) ? EdgeDirection::POSITIVE : EdgeDirection::NEGATIVE;
edges.push_back({i + offset, gradMag, dir});
}
}
return edges;
}