## Image Processing trouble and masking. Is there a way to mask multiple images with a new mask every time in a loop?

### Matt (view profile)

on 18 Jun 2013

I have a stack of dicom images(about 600) in a 4-D array and based on the image I want to create a mask and apply it to that image for segmentation of the image. I want to have this done in a loop so I dont have to manually do it for each image.Can this be done? I have converted all the images to bw so to create a mask. I have tried but I am getting a error. Below Is part of the code that I have been using and the error. I get the error at qline1 = imline(gca, [x1(i,3) y1(i,3) ; x1(i,2) y1(i,2)]);

```Code:
```
`     % Drawing of lines for quadrants`
```for i = prim:fin;
BW4(:,:,:,i) = imshow(BW3(:,:,:,i));
qline1(i,1) = imline(gca, [x1(3,1,i) y1(3,1,i) ; x1(2,1,i) y1(2,1,i)]);
qline2(i,1) = imline(gca, [x2(3,1,i) y2(3,1,i) ; x2(2,1,i) y2(2,1,i)]);
end
```
```BW3(M1) = 0;
BW3(M2) = 0;
```
```% Defining Ellipse
```
```r{i} = {tot,1};
h{i} = {tot,1};
```
```ratio = 0.8;
for i = prim:fin;
r{i} = regionprops(BW3(:,:,:,i), 'MajorAxisLength');
h{i} = regionprops(BW3(:,:,:,i), 'MinorAxisLength');
R(i,1) = ((extractfield(r{i}, 'MajorAxisLength'))*ratio);
H(i,1) = ((extractfield(h{i}, 'MinorAxisLength'))*ratio);
end
```
```% Drawing of Ellipse
```
```loc1 = zeros(tot,1);
loc2 = zeros(tot,1);
```
```for i = prim:fin;
loc1(i,1) = cent(i,1);
loc2(i,1) = cent(i,2);
end
```
```lc1 = loc1 - (R/2);
lc2 = loc2 - (H/2);
```
```for i = prim:fin;
vbEllipse(i) =  imellipse(gca, [lc1(i,1) lc2(i,1) R(i,1) H(i,1)]);
xy(i) = vbEllipse(i).getVertices();
axesHandlesToChildObjects = findobj(gca, 'Type', 'line');
if ~isempty(axesHandlesToChildObjects);
delete(axesHandlesToChildObjects);
end
hold on;
x(i,:) = xy(:,1,i);
y(i,:) = xy(:,2,i);
xCenter(i) = mean(x(i,:));
yCenter(i) = mean(y(i,:));
x(i,:) = x(i,:) - xCenter(i);
y(i,:) = y(i,:) - yCenter(i);
xy(:,:,i) = [x(i,:) y(i,:)];
theta =  -rot(mid);
rotationArray = [cosd(theta) -sind(theta); sind(theta) cosd(theta)];
rotated_xy(:,:,i) = xy(:,:,i) * rotationArray;
x(:,:,i) = rotated_xy(:,1,i) + xCenter(i);
y(:,:,i) = rotated_xy(:,2,i) + yCenter(i);
VBEllipse(:,:,i) = [x(:,:,i) y(:,:,i)];
ellip(:,:,i) = impoly(gca, VBEllipse(:,:,i));
BW3(M3) = 0;
montage(BW3(:,:,:,i));
end
```
```BW5(M3) = 1;
BW5(~M3) = 0;
BW5(M1) = 0;
BW5(M2) = 0;
```
```Error:
```
```Error using iptSetPointerBehavior>parseInputs (line 135)
First input argument, h, contains one or more invalid handles.
```
```Error in iptSetPointerBehavior (line 119)
[h, pointerBehavior] = parseInputs(varargin{:});
```
```Error in manageInteractivePlacement/resetChildPointerManagement (line
155)
iptSetPointerBehavior(cached_pointer_behavior{k,1},...
```
```Error in manageInteractivePlacement (line 106)
resetChildPointerManagement();
```
```Error in imline>imlineAPI (line 258)
placement_aborted =
manageInteractivePlacement(h_axes,h_group,@placeLine);
```
```Error in imline (line 89)
[h_group,draw_api] = imlineAPI(varargin{:});
```
```Error in im_seg2 (line 155)
qline1(i,1) = imline(gca, [x1(3,1,i) y1(3,1,i) ; x1(2,1,i)
y1(2,1,i)]);
```

Thanks for the help

Matt

## Products

### Sean de Wolski (view profile)

on 19 Jun 2013

Make sure you use the:

```imshow(I,'parent',ax)
```

syntax to draw the image on the existing axes. Otherwise, a new axes is created which is why your imroi disappears (I believe).

Matt

### Matt (view profile)

on 20 Jun 2013

ax is supposed to be the array of axes correct? But I'm not exactly sure how to create that array of axes from my array of images. Any advice?

Matt

Sean de Wolski

### Sean de Wolski (view profile)

on 21 Jun 2013

ax is supposed to be the handle to the axes you want to plot to.

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi test