Conversion to double from cell is not possible.

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

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.

Sign in to comment.

Answers (0)

Categories

Asked:

on 30 Mar 2018

Commented:

on 1 Apr 2018

Community Treasure Hunt

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

Start Hunting!