help with image processing
조회 수: 2 (최근 30일)
이전 댓글 표시
I have a sequence of images whose area properties I wish to obtain. For this, I have to find the envelope of the object. In the 'samples.jpg' image attached here, we can see on the left column 4 grayscale images and on the right column the corresponding binary images. However, this almost gives me the area I need but not exactly. The area actually desired is that highlighted in the blue boundary, drawn by hand, in 'required.jpg'. I have provided 'L10_T1_A0.zip' which contain more such samples.
This is what I have been doing to get the area (more importantly the B/W binary image of the required shape). How can I get a better 'Ioppened' image?
half_Imr --> is the grayscale image on the left column of 'samples.jpg'
Iopenned --> is the binary image on the right column of 'samples.jpg'
get_area_from_image --> another custom function to get the area using 'regionprops' MATLAB function
level = 0.3;
I_BW = imbinarize(half_Imr,level); %binary image seen on right column of 'samples.jpg'
morph_rect = [4 39];
Ifill = imfill(I_BW,'holes');
se = strel('rectangle',morph_rect);
Iopenned = imopen(Ifill,se);
% evaluating area swept by ribbon
pixel2mm = 19/60; % Calibration from pixel to mm
Aimage = get_area_from_image(Iopenned, pixel2mm);
----------------------------------------------------------------------------------
function Aimage = get_area_from_image(Iopenned, pixels2mm)
%%This function gives the area
Iregion_temp = regionprops(Iopenned, 'Area');
[sz,~] = size(Iregion_temp);
temp = struct2cell(Iregion_temp);
temp1 = cell2mat(temp);
if sz > 1 %multiple clusters of white area in image giving multiple areas
Aimm2 = max(temp1 );
elseif isempty(temp1) == 0
Aimm2 = temp1 ;
else
Aimm2 = 0;
end
Aimm2 = Aimm2*pixels2mm^2;
Aimage = Aimm2*1e-6; %m^2
end
댓글 수: 0
답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Image Segmentation and Analysis에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!