2012-05-25 3 views
0

다음은 화상에 라인 임의 손으로 그린 ​​강도 프로파일이다. 프로파일은 원 또는 타원의 원호로 근사 될 수 있습니다. 카메라 보정을 위해이 작업을하고 있습니다. 실제 산업용 카메라가 없으므로 교정에 필요한 보정을 시뮬레이션하려고합니다.OpenCV MATLAB : 특정 Intensity 프로파일이있는 선을 그리는 방법은 무엇입니까? 가 <img src="https://i.stack.imgur.com/TFddH.jpg" alt="enter image description here"></p> <p>태스크가 라인 <strong></strong> 그릴이다

질문은 위와 유사한 플롯을 따르는 픽셀 값을 원한다면 다시 말하면됩니다. 이 프로그램 (선호 opencv 사용)을 사용하여이 작업을 수행하고 싶습니다. 수천 개의 픽셀이 있기 때문에 수동으로이 값을 입력하지 마십시오.
알고리즘/의사 코드로 충분합니다. 또한 실제 Intensity 프로파일이 없다는 점에 유의하십시오. 그렇지 않으면 해당 값을 읽었을 것입니다.

언제 이런 상황이 발생합니까??

카메라에서 사진을 찍을 때 (완전 흰색이라고 가정) 테이블 위에 개체를 놓고 수직 방향으로 카메라를 올려 놓는 경우를 가정 해 봅니다. 사진의 중심에서 카메라에서 수직 하향으로 오는 빛은 가장자리에서 반사되는 빛과 비교할 때 강도가 강할 것입니다. 이미지의 모든 선에서 픽셀 값을 측정하면 위에 표시된 것과 같은 강도 커브가 표시됩니다. 나는 당분간 카메라를 가지고 있지 않기 때문에, 나는이 상황을 모방하고 싶다. 이것을 달성하는 방법?

답변

1

이것은 정확하게 이미지 처리가 아니라 오히려 이미지 생성 ... 어쨌든. 당신은 호를 원하기 때문에

, 우리는 여전히 (내 의견으로는 주요 특성), 제 중간과 마지막 점을 그 호의에 3 점, 할 필요

N = 100; % number of pixels 
x1 = 1; 
x2 = floor(N/2); 
x3 = N; 

y1 = 242; 
y2 = 255; 
y3 = 242; 

을 지금 원의 호를 그리 그 이 포인트를 포함합니다. 이 문제는 이미 MATLAB 여기 설명 : http://www.mathworks.nl/matlabcentral/newsreader/view_thread/297070

x21 = x2-x1; y21 = y2-y1; 
x31 = x3-x1; y31 = y3-y1; 
h21 = x21^2+y21^2; h31 = x31^2+y31^2; 
d = 2*(x21*y31-x31*y21); 
a = x1+(h21*y31-h31*y21)/d; % circle center x 
b = y1-(h21*x31-h31*x21)/d; % circle center y 
r = sqrt(h21*h31*((x3-x2)^2+(y3-y2)^2))/abs(d); % circle radius 

당신은 중간 값은 항상 큰 가정하면 (따라서 당신이 플롯해야합니다 원의 상단 부분), 당신이이를 그릴 수 있습니다 :

x = x1:x3; 
y = b+sqrt(r^2-(x-a).^ 2); 
plot(x,y); 

당신은 나에게 다음과 같은 결과를 제공

xlim([1 N]); 
ylim([200 260]); 

로 볼 수 창을 조정할 수 있습니다 arc