Getting an error: Error using .* Integers can only be combined with integers of the same class, or scalar doubles.

1 view (last 30 days)
After running the following code I am getting this error in the pol2cart function
[srad,sang,S] = specxture(f);
function [ srad, sang, S] = specxture( f )
S = fftshift(fft2(f));
%imtool (S);
S = abs(S);
%imshow(S,[]);
[M, N] = size(S);
x0 =uint8(M/2+1);
%x0=int16(x0);
y0 =uint8(N/2+1);
%y0=int16(y0);
rmax = uint8((min(M, N)/2)-1);
%rmax1=int16(rmax);
srad = zeros(1, rmax);
srad(1) = S(x0, y0);
%imtool (S);
for r = 2:rmax
[xc, yc] = halfcircle(r, x0, y0);
srad(r) = sum(S(sub2ind(size(S), xc, yc)));
end
[xc, yc] = halfcircle(rmax, x0, y0);
sang = zeros(1, length(xc));
for a = 1:length(xc)
[xr, yr] = radial(x0, y0, xc(a), yc(a));
sang(a) = sum(S(sub2ind(size(S), xr, yr)));
end
S = mat2gray(log(1+S));
end
function [xc, yc] = halfcircle(r, x0, y0)
theta = 91:270;
theta = double(theta*pi/180);
[xc, yc] = pol2cart(theta, r);
xc = round(xc)'+x0;
yc = round(yc)'+y0;
function [x,y,z] = pol2cart(th,r,z)
x = r.*cos(th);
y = r.*sin(th);

Accepted Answer

Walter Roberson
Walter Roberson on 27 Nov 2018
You define rmax as uint8 . Your for loop with rmax as upper bound then becomes uint8 . You are passing that r to halfcircle and passing that uint8 to pol2cart along with the vector of double for theta. The operation of pol2cart involves r.*cos(theta) . With theta being a vector of double this becomes uint8 .* vector of double . That operation is not defined.
The workaround is to loop the pol2cart so that you pass in only a scalar theta as combining uint8 and scalar double is defined . You would then get out the x and y calculated in uint8 that you seem to be looking for.
  3 Comments
Walter Roberson
Walter Roberson on 27 Nov 2018
I admit to being puzzled as to why you are using uint8 operations; it makes your calculation more difficult for no obvious benefit. I would have suggested, for example, changing
x0 =uint8(M/2+1);
to
x0 = floor(M/2+1);
and likewise for the others, and then just gone ahead with double.

Sign in to comment.

More Answers (1)

D Aghor
D Aghor on 28 Nov 2018
Edited: D Aghor on 28 Nov 2018
As a part of my base paper implementation I am using this ''specxture'' function as it is from an Image Processing Text book.

Categories

Find more on Graphics Object Programming in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!