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

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.

댓글을 달려면 로그인하십시오.

답변 (0개)

카테고리

도움말 센터File Exchange에서 Image Processing Toolbox에 대해 자세히 알아보기

질문:

2018년 3월 30일

댓글:

2018년 4월 1일

Community Treasure Hunt

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

Start Hunting!

Translated by