作为前言:这是我的第一个问题 - 我已尽力使其尽可能清晰,但如果它不符合要求的标准,我深表歉意。
作为夏季项目的一部分,我正在拍摄在冰晶内生长的内部融化图形的延时图像。对于这些图像中的每一个,我想测量所形成图形的周长和面积。下面链接是我的一张图片的示例:
我尝试使用的方法如下:
- 加载图像、裁剪并转换为灰度
- 降噪处理
- 查找边缘/周长
- 尝试连接边缘
- 用白色填充周边
- 使用 regionprops 测量面积和周长
这是我正在使用的代码:
clear; close all;
% load image and convert to grayscale
tyrgb = imread('TyndallTest.jpg');
ty = rgb2gray(tyrgb);
figure; imshow(ty)
% apply a weiner filter to remove noise.
% N is a measure of the window size for detecting coherent features
N=20;
tywf = wiener2(ty,[N,N]);
tywf = tywf(N:end-N,N:end-N);
% rescale the image adaptively to enhance contrast without enhancing noise
tywfb = adapthisteq(tywf);
% apply a canny edge detection
tyedb = edge(tywfb,'canny');
%join edges
diskEnt1 = strel('disk',8); % radius of 4
tyjoin1 = imclose(tyedb,diskEnt1);
figure; imshow(tyjoin1)
正是在这个阶段,我正在挣扎。无论我如何使用形态结构元素,边缘都没有完全连接。也许有更好的方法来完成边缘?链接是此代码输出的图形示例:
我试图加入边缘的原因是我可以用白色像素填充周边,然后使用 regionprops 输出该区域。我曾尝试使用 imfill 命令,但似乎无法填充轮廓,因为周边内有大量黑暗区域需要填充。
有没有更好的方法来获得在这种情况下更合适的这些熔化数字之一的面积?
作为背景研究:我可以使用以下代码使此方法适用于由白色背景上的黑色圆圈组成的简单图像。但是我不知道如何对其进行编辑以处理边缘不太明确的更复杂的图像。
clear all
close all
clc
%% Read in RGB image from directory
RGB1 = imread('1.jpg') ;
%% Convert RPG image to grayscale image
I1 = rgb2gray(RGB1) ;
%% Transform Image
%CROP
IC1 = imcrop(I1,[74 43 278 285]);
%BINARY IMAGE
BW1 = im2bw(IC1); %Convert to binary image so the boundary can be traced
%FIND PERIMETER
BWP1 = bwperim(BW1);
%Traces perimeters of objects & colours them white (1).
%Sets all other pixels to black (0)
%Doing the same job as an edge detection algorithm?
%FILL PERIMETER WITH WHITE IN ORDER TO MEASURE AREA AND PERIMETER
BWF1 = imfill(BWP1); %This opens figure and allows you to select the areas to fill with white.
%MEASURE PERIMETER
D1 = regionprops(BWF1, 'area', 'perimeter');
%Returns an array containing the properties area and perimeter.
%D1(1) returns the perimeter of the box and an area value identical to that
%perimeter? The box must be bounded by a perimeter.
%D1(2) returns the perimeter and area of the section filled in BWF1
%% Display Area and Perimeter data
D1(2)