I have written a logic for co-occurance matrix but it is taking a lot of time, is there any other to built the logic?

1 view (last 30 days)
4.Calculate four co-occurrence matrices P, take the distance 1, the angles are 0, 45, 90, 135 respectively
%M&N ARE ROWS &COLOUMNS OF THE IMAGE
%--------------------------------------------------------------------------
P = zeros(16,16,4); %Generate 4 16 * 16 0 matrix
for m = 1:16
for n = 1:16
for i = 1:M
for j = 1:N
if
j<N&Gray(i,j)==m-1&Gray(i,j+1)==n-1 %0 ° m for the row n for the column
P(m,n,1) = P(m,n,1)+1;
P(n,m,1) = P(m,n,1);
end
if i>1&j<N&Gray(i,j)==m-1&Gray(i-1,j+1)==n-1 %45°
P(m,n,2) = P(m,n,2)+1;
P(n,m,2) = P(m,n,2);
end
if i<M&Gray(i,j)==m-1&Gray(i+1,j)==n-1 %90°
P(m,n,3) = P(m,n,3)+1;
P(n,m,3) = P(m,n,3);
end
if i<M&j<N&Gray(i,j)==m-1&Gray(i+1,j+1)==n-1 %135°
P(m,n,4) = P(m,n,4)+1;
P(n,m,4) = P(m,n,4);
end
end
end
if m==n
P(m,n,:) = P(m,n,:)*2;
end
end
end

Answers (3)

Walter Roberson
Walter Roberson on 6 Feb 2018
You could vectorize. Or you could use graycomatrix()
  6 Comments
Walter Roberson
Walter Roberson on 14 Feb 2018
Under the conditions that all values in Gray are integers in the range 0 to 15, then your code
for m = 1:16
for n = 1:16
for i = 1:M
for j = 1:N
j<N&Gray(i,j)==m-1&Gray(i,j+1)==n-1 %0 ° m for the row n for the column
P(m,n,1) = P(m,n,1)+1;
P(n,m,1) = P(m,n,1);
end
end
end
end
can be replaced by
V = @(M) M(:);
P0 = accumarray(1+[V(Gray(:,1:end-1)), V(Gray(:,2:end))], 1);
This will make P0 a 16 x 16 matrix containing the applicable counts.
Your other three conditions can be created with similar lines. You can then put all four of them together into your P matrix.
P = cat(3, P0, P45, P90, P135);

Sign in to comment.


Roger Stafford
Roger Stafford on 14 Feb 2018
Edited: Roger Stafford on 15 Feb 2018
In the code you have written the tests are false the great majority of the cases, and that suggests strongly that the method can be made more efficient.
Since you mention “image” in connection with rows and columns of ‘Grey’, I will assume all the values in ‘Grey’ are non-negative integers. I will add 1 to the values of ‘Grey’ and replace any that then exceed 17 by 17 itself. This latter will make P have just one extra row and one extra column of false values which will be discarded at the end.
P = zeros(17,17,4);
G = reshape(min(Grey(:)+1,17),size(Grey));
for i = 1:M
for j = 1:N-1
m = G(i,j);
n = G(i,j+1);
P(m,n,1) = P(m,n,1)+1;
end
end
for i = 2:M
for j = 1:N-1
m = G(i,j);
n = G(i-1,j+1);
P(m,n,2) = P(m,n,2)+1;
end
end
for i = 1:M-1
for j = 1:N
m = G(i,j);
n = G(i+1,j);
P(m,n,3) = P(m,n,3)+1;
end
end
for i = 1:M-1
for j = 1:N-1
m = G(i,j);
n = G(i+1,j+1);
P(m,n,4) = P(m,n,4)+1;
end
end
P = P(1:16,1:16,:); % Trim off one row and one column
P = P + permute(P,[2,1,3]); % Replaces the "P(n,m,-)=P(m,n,-)" above
  6 Comments

Sign in to comment.


teja jayavarapu
teja jayavarapu on 15 Feb 2018
Edited: teja jayavarapu on 15 Feb 2018
Ok,thank you for the support,can you please help me with the Gussian internal normalisation for texture parameters of (capacity,entropy,relevance,inverse difference)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!