简体   繁体   中英

MATLAB image processing technique

在此处输入图片说明

I have this 3D array in MATLAB (V: vertical, H: horizontal, t: time frame)

Figures below represent images obtained using imagesc function after slicing the array in terms of t axis

在此处输入图片说明 在此处输入图片说明

area in black represents damage area and other area is intact

each frame looks similar but has different amplitude

I am trying to visualize only defect area and get rid of intact area

I tried to use 'threshold' method to get rid of intact area as below

NewSet = zeros(450,450,200);

for kk = 1:200
    frame = uwpi(:,:,kk);
    STD = std(frame(:));
    Mean = mean(frame(:));
    for ii = 1:450
        for jj =1:450
            if frame(ii, jj) > 2*STD+Mean
                NewSet(ii, jj, kk) = frame(ii, jj);
            else 
                NewSet(ii, jj, kk) = NaN;            
            end           
        end
    end
end

However, since each frame has different amplitude, result becomes 在此处输入图片说明 在此处输入图片说明

Is there any image processing method to get rid of intact area in this case?

Thanks in advance

You're thresholding based on mean and standard deviation, basically assuming your data is normally distributed and looking for outliers. But your model should try to distinguish values around zero (noise) vs higher values. Your data is not normally distributed, mean and standard deviation are not meaningful.

Look up Otsu thresholding (MATLAB IP toolbox has it). It's model does not perfectly match your data, but it might give reasonable results. Like most threshold estimation algorithms, it uses the image's histogram to determine the optimal threshold given some model.

Ideally you'd model the background peak in the histogram. You can find the mode, fit a Gaussian around it, then cut off at 2 sigma. Or you can use the "triangle method", which finds the point along the histogram that is furthest from the line between the upper end of the histogram and the top of the background peak. A little more complex to explain, but trivial to implement. We have this implemented in DIPimage ( http://www.diplib.org ), M-file code is visible so you can see how it works (look for the function threshold )

Additionally, I'd suggest to get rid of the loops over x and y. You can type frame(frame<threshold) = nan , and then copy the whole frame back into NewSet in one operation.

Do I clearly understand the question, ROI is the dark border and all it surrounds? If so I'd recommend process in 3D using some kind of region-growing technique like watershed or active snakes with markers by imregionalmin. The methods should provide segmentation result even if the border has small holes. Than just copy segmented object to a new 3D array via logic indexing.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM