Conversion to double from cell is not possible.
Show older comments
I have the following code for extracting road from satellite images. This gives me an error of "Conversion to double from cell is not possible", in the createSegmentedMap function. I tried removing the 'double' conversion and even tried converting the cell into a matrix yet the problem hasnt't been solved. Could someone please help me? Thank you!
MATLAB code
function [colorSegmentedMap, graySegmentedMap] = integrateRegionEdge(Image, memberShipFn, edgeMapHigherThreshold)
ss=memberShipFn';
memberShipFn=memberShipFn';
numberOfClusters = size(ss, 1);
I = Image;
finalFlag = 0;
noc = numberOfClusters;
%edgeImageReal(:,:,1) = edgeMapLowerThreshold;
edgeImageReal(:,:,2) = edgeMapHigherThreshold;
[r c zz] = size(I);
stopTh =10;
linkedEdge = edgeImageReal(:,:,2);
% edgeImage(:,:,2) = maskRegions(edgeImageReal(:,:,2), 0);
edgeImage(:,:,2) = edgeImageReal(:,:,2);
op1 = createSegmentedMap(memberShipFn, r, c, noc, edgeImage(:,:,2), finalFlag);
U1 = reshape(memberShipFn(1,:), r, c);
U2 = reshape(memberShipFn(2,:), r, c);
if noc > 2
U3 = reshape(memberShipFn(3,:), r, c);
end
if noc > 3
U4 = reshape(memberShipFn(4,:), r, c);
end
if noc > 4
U5 = reshape(memberShipFn(5,:), r, c);
end
MM(:, :, 1) = U1;
MM(:, :, 2) = U2;
if noc>2
MM(:, :, 3) = U3;
end
if noc >3
MM(:, :, 4) = U4;
end
if noc >4
MM(:, :, 5) = U5;
end
MM1 = zeros(r,c,noc);
MM2 = zeros(r,c,noc);
MM31 = zeros(r,c,noc);
MM2 = MM;
for i = 1:r
for j = 1:c
[temp] = sort(MM(i, j, :));
for ij = 1 : noc
MM3(i,j,ij) = find(MM(i,j,ij) == temp(1,1,:));
end
end
end
MM31 = noc+1-MM3;
convergence = 0;
Neighbors = 1;
DYWIN = 0;
for itr = 1:10
for i = 1:r
for j = 1:c
if convergence == 1
NR = 1;
[NRLi, NRRi, NRLj, NRRj, i1, j1] = findNeighbors(NR, i, j, r, c);
edgeImageRealT(i, j, 2) = calcAveEdge(edgeImageReal(NRLi:NRRi, NRLj:NRRj, :), op1(NRLi:NRRi, NRLj:NRRj), i1, j1, convergence);
else
% NR = 4;
NR = 1;
NR1 = 2;
[NRLi, NRRi, NRLj, NRRj, i1, j1] = findNeighbors(NR,NR1,i, j, r, c);
if edgeImageReal(i, j, 2) == 1;
edgeImageRealT(i, j, 2) = 1;
else
edgeImageRealT(i, j, 2) = calcAveEdge(edgeImageReal(NRLi:NRRi, NRLj:NRRj, :), op1(NRLi:NRRi, NRLj:NRRj), i1, j1, convergence);
end
end
NR = Neighbors;
NR1 = Neighbors;
[NRLi, NRRi, NRLj, NRRj, i1, j1] = findNeighbors(NR,NR1, i, j, r, c);
for k = 1:noc
MM1(i, j, k) = calcAve(MM(NRLi:NRRi, NRLj:NRRj, :), edgeImage(NRLi:NRRi, NRLj:NRRj,2), i1, j1, k, MM31(i, j, :));
end
[p1 q1] = max(MM2(i, j, :));
[p2 q2] = max(MM1(i, j, :));
if edgeImage(i, j, 2) ~= 1
MM2(i,j,q2) = MM2(i,j,q2) + 0.1;
MM2(i,j,1:noc) = MM2(i,j,1:noc) - 0.05;
for k = 1:noc
if MM2(i,j,k) <0
MM2(i,j,k) = 0;
end
end
MM2(i,j,:) = MM2(i,j,:) ./ sum(MM2(i,j,:));
end
end
end
MM = MM2;
edgeImageReal(:,:,2) = edgeImageRealT(:,:,2);
edgeImage(:,:,2) = edgeImageReal(:,:,2);
if mod(itr,4) == 0
for k = 1:noc
U(k, :) = reshape(MM1(:, :, k), 1, r*c);
end
op2 = createSegmentedMap(U, r, c, noc, edgeImage(:,:,2), finalFlag);
diff = op2-op1;
diff1 = reshape(diff, r*c, 1);
if length(find(diff1 ~= 0)) < stopTh
disp('Phase 1 finished');
if convergence == 1
finalFlag = 1;
graySegmentedMap = createSegmentedMap(U, r, c, noc, edgeImage(:,:,2), finalFlag);
colorSegmentedMap = convertColor(graySegmentedMap);
return;
else
convergence = 1;
end
end
op1 = op2;
end
end
finalFlag = 1;
% eI=edgeImage(:,:,2);
% [L,num]=bwlabel(eI);
% for i=1:num
% [r c]=find(L==i)
% X=[r c];
% if(size(X,1))<10
% L(r,c)=0;
% end
% end
% edgeImage(:,:,2)=L;
graySegmentedMap = createSegmentedMap(U, r, c, noc, edgeImage(:,:,2), finalFlag);
colorSegmentedMap = convertColor(graySegmentedMap);
disp 'cc';
function dispop = createSegmentedMap(U, rows, cols, noc, edgeImage, finalFlag)
result1=zeros(1,rows*cols);
result1=max(U,[],1);
for i =1 :rows*cols
for j=1:noc
if U(j,i)==result1(i)
imagefinal1(i) = j;
end
end
end
op1 = reshape(imagefinal1, rows, cols);
edgeImage=double(edgeImage);
op1=double(op1);
if finalFlag == 1
finalEdge = addEdge(edgeImage, op1);
edgeImage = finalEdge;
end
%edgeImage = cell2mat(edgeImage);
dispop = op1 .* (1-double(edgeImage)); //Error here
%dispop = op1 .* (1-edgeImage);
function finalEdge = addEdge(edgeImage, op1)
op1=double(op1);
edgeImage=double(edgeImage);
TT = edge(op1, 'canny');
de = maskRegions(edgeImage, 1);
finalEdge = im2bw(TT - de) | edgeImage;
finalEdge = edgeLink(finalEdge, op1);
1 Comment
Image Analyst
on 1 Apr 2018
Before you copy from MATLAB, you can type control-a, control-i to clean up the indenting of your code.
I don't even know what you passed in to this function. Plus, you didn't supply the actual error message stating the line of code. Please read this link then paste ALL THE RED TEXT back here.
Answers (0)
Categories
Find more on Image Processing Toolbox in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!