나는 양수 값과 음수 값으로 구성된 행렬을 가지고 있습니다. 나는이 일을 할 필요가있다.픽셀의 이웃을 계산하는 가장 빠른 방법
는 u(i,j)
u
행렬의 픽셀을 표시하자.
- 는 제로 크로싱 픽셀을 계산합니다.
u(i-1,j)
및u(i+1,j)
의 부호가 반대이거나u(i,j-1)
및u(i,j+1)
의 부호가 반대 인 경우 격자의 픽셀입니다. - 그러면 이러한 제로 크로싱 픽셀 주변의 협 대역을 계산해야합니다. 협 대역의 폭은 각 픽셀에 대해
(2r+1)X(2r+1)
입니다. 난r=1
그래서 나는 실제로 각 제로 횡단 픽셀의 8 이웃 픽셀을 가져 가야한다.
나는 프로그램에서 이런 짓을했는지. 아래에서 확인하십시오.
%// calculate the zero crossing pixels
front = isfront(u);
%// calculate the narrow band of around the zero crossing pixels
band = isband(u,front,1);
나는 또한 isfront
및 isband
기능을 장착하고있다.
function front = isfront(phi)
%// grab the size of phi
[n, m] = size(phi);
%// create an boolean matrix whose value at each pixel is 0 or 1
%// depending on whether that pixel is a front point or not
front = zeros(size(phi));
%// A piecewise(Segmentation) linear approximation to the front is contructed by
%// checking each pixels neighbour. Do not check pixels on border.
for i = 2 : n - 1;
for j = 2 : m - 1;
if (phi(i-1,j)*phi(i+1,j)<0) || (phi(i,j-1)*phi(i,j+1)<0)
front(i,j) = 100;
else
front(i,j) = 0;
end
end
end
function band = isband(phi, front, width)
%// grab size of phi
[m, n] = size(phi);
%// width=r=1;
width = 1;
[x,y] = find(front==100);
%// create an boolean matrix whose value at each pixel is 0 or 1
%// depending on whether that pixel is a band point or not
band = zeros(m, n);
%// for each pixel in phi
for ii = 1:m
for jj = 1:n
for k = 1:size(x,1)
if (ii==x(k)) && (jj==y(k))
band(ii-1,jj-1) = 100; band(ii-1,jj) = 100; band(ii-1,jj+1) = 100;
band(ii ,jj-1) = 100; band(ii ,jj) = 100; band(ii,jj+1) = 100;
band(ii+1,jj-1) = 100; band(ii+1,jj) = 100; band(ii+1,jj+1) = 100;
end
end
end
end
출력은 :,뿐만 아니라 계산 시간 이하로 주어진다 : 나는이 코드를 실행하면
%// Computation time
%// for isfront function
Elapsed time is 0.003413 seconds.
%// for isband function
Elapsed time is 0.026188 seconds.
내가 작업에 대한 정답하지만 계산을받을 수 있나요 너무 좋아서. 그것을 할 수있는 더 좋은 방법이 있습니까? 특히 isband
의 기능은 무엇입니까? 코드를 어떻게 최적화 할 수 있습니까?
미리 감사드립니다. EitanT에 의해 제안
는
당신이 생각 해 봤나 형태 학적 작업은 말 ['bwmorph'] (http://www.mathworks.com/help/images/ref/bwmorph.html)? –
주의 : 'isband'의 오른쪽 아래에있는 두 개의 인접 픽셀에 대한 액세스가 잘못 코딩되었습니다. 당신은 아마도 복사 붙여 넣기, 그리고 -1을 +1 및 +0로 수정하는 것을 잊었을 것입니다. –
@RodyOldenhuis 코멘트 주셔서 감사합니다. 그래, 내가 실수로 복사해서 붙여 넣었다. 수정하기 위해 내 질문을 수정했습니다. – roni