Conversion to double from cell is not possible.
Afficher commentaires plus anciens
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 commentaire
Image Analyst
le 1 Avr 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.
Réponses (0)
Catégories
En savoir plus sur Image Processing Toolbox dans Centre d'aide et File Exchange
Produits
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!