Trying to find the error in logic

1 visualizzazione (ultimi 30 giorni)
Rida Memon il 2 Mar 2020
Commentato: Rida Memon il 3 Mar 2020
There is some problem in the logic of this code. It is supposed to segment the lungs from chest radiographs for the set threshold but it is not doing that correctly (providing same results for any threshold value).
clear; clc; close all;
Threshold = 240;
raw_x_ray='ee.png';
figure(101);
imshow(I);
colormap(gray);
title('Grayscale X-Ray');
I=wiener2(I, [7 7]);
figure(102);
subplot(2,1,1);
imshow(I);
subplot(2,1,2);
imhist(I, 256);
a_thresh = I >= Threshold; % set this threshold
[labelImage, numberOfBlobs] = bwlabel(a_thresh);
props = regionprops(a_thresh,'all');
sortedSolidity = sort([props.Solidity], 'descend');
SB = sortedSolidity(1);
if SB == 1
binaryImage = imbinarize(I); figure(103);
imshow(binaryImage); colormap(gray);
SE = strel('square',3);
SE = strel('square',2);
BW2 = imfill(binaryImage,'holes');
new_image = BW2 ;
new_image(~mask) = 0; % invert background and holes
B=bwboundaries(new_image); % can only accept 2 dimensions
figure(104);
imshow(new_image);
ss = strcat('Result_',num2str(Threshold),'.mat');
save(ss,'new_image');
hold on
visboundaries(B);
im8 = im2uint8(new_image);
imwrite(im8, 'ccc.png')
end
2 CommentiMostra NessunoNascondi Nessuno
John Petersen il 2 Mar 2020
It would help if you could narrow it down a little more and maybe explain what is wrong about it?
Rida Memon il 2 Mar 2020
The code is providing same output for any threshold value be it 90,110 or 250 etc.. I feel the problem is in these lines: SB = sortedSolidity(1); if SB == 1

Accedi per commentare.

Risposte (1)

Daniel Vieira il 2 Mar 2020
Modificato: Daniel Vieira il 2 Mar 2020
the Threshold parameter doesn't matter at all in your code. you binarize the image with the threshold, measure solidity of blobs, take the largest solidity, and if it's 1 (which is extremely likely) then you throw the previous binarization away and binarize again with default values of imbinarize. I'm not sure that's what you intended to do, but to me it seems unntentional, I don't think this approach goes anywhere.
1 CommentoMostra -1 commenti meno recentiNascondi -1 commenti meno recenti
Rida Memon il 3 Mar 2020
Actually i have picked that code from a site. I understand that there is above stated problem with this code. Therefore i need help to correct this code. It should not throw but use that previously obtained threshold. Kindly help me if you can.

Accedi per commentare.

Categorie

Scopri di più su Image Thresholding in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by