Function calculating distance between pixels in 1x1x3 arrays
조회 수: 1 (최근 30일)
이전 댓글 표시
I have a function which calculates square distance between pixels, however it wants to calculate the distance between 2 pixels which has a 1x1x3 array.
For example, inputs P and Q both have 1 row, 1 column and 3 colour layers, and single output is squared distance.
I found this function on matlab forums which calculates squared distance and it gives correct results: https://ww2.mathworks.cn/matlabcentral/answers/479129-how-can-i-have-multiple-arrays-as-an-input-for-my-function
function [SquaredDistance] = PixelDistance(P,Q)
P1 = P(1); P2 = P(2); P3 = P(3);
Q1 = Q(1); Q2 = Q(2); Q3 = Q(3);
SquaredDistance = (P1-Q1)^2 + (P2-Q2)^2 + (P3-Q3)^2;
end
However, if I have a table (as an example) like this: (where :,:,1 is red values :,:,2 is green values etc)
Colours(:,:,1) =
143
156
231
Colours(:,:,2) =
37
139
142
Colours(:,:,3) =
30
22
65
How do we calculate squared value using input commands such as P = Colours(1,1,:) and Q = Colours(3,1,:) using the code?
댓글 수: 0
채택된 답변
Jos (10584)
2019년 9월 7일
The function you found is rather badly coded ...
Another expression for "calculating a distance" is "taking the norm". Matlab has a function for that, called NORM :-) When you have two points in 3D (colour, RGB) space, P and Q, represented as vectors with three values, you can calculated the distance by looking at the vector between P and Q:
P = [10 ; 100 ; 10], Q = [30 ; 40 ; 50] % example
norm(P-Q) % which is the same as
sqrt(sum((P-Q).^2))
In your examples you have a your 3D points (vectors) stacked up in a single array Colours. It looks like Colours is a 3-by-1-by-3 array. You can get rid of the obfusciating second dimension using squeeze
Colours = randi(100,[3 1 3]) % example of your data ??
C = squeeze(Colours) % a 3-by-3 array: each column is a point
norm((C(1,:)-C(2,:)))
댓글 수: 5
Jos (10584)
2019년 9월 7일
In this code, Matlab expects Colours to be a variable in your workspace. I think you would benefit greatly from looking at an introduction course, like Matlab Onramp
Amr Azab
2022년 7월 25일
I have a question please
When i have Orthophoto has 3 layers or arrays (R G B) and and i have also DSM and want to measure the distance between pixels in all those layers
What should i do please ?
Which code should i write exactly to do this?
추가 답변 (1개)
Sara Foster
2019년 9월 7일
댓글 수: 1
Jos (10584)
2019년 9월 8일
I do not get this question, sorry. Also, do not pose a new question as an answer here but open a new thread, or put it as a comment/follow-up on a given answer, to avoid confusion :-)
참고 항목
카테고리
Help Center 및 File Exchange에서 Logical에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!