如何安排像素为适当的阈值

13次浏览(最近30天)
阿里Zulfikaroglu
阿里Zulfikaroglu 2021年5月16日
我有两张乳房x光片。
我想用阈值法分割肿瘤区域。
但是每一张图片的图像强度都是不同的,所以它严重影响了我的结果。
我尝试使用“meanIntensity = mean(grayImage(:))”来计算图像的平均强度。"和if条件语句根据这个值为阈值,但它不能正常工作。
我的意思是mdb005图像,我使用阈值> 155以获得良好的结果,但对于mdb013,我必须选择>210或其他值。(İf我选择>155,它显示巨大的mdb013)
但如果我选择>210,这次mdb005肿瘤消失。
如何处理这两幅图像来自动精确分割肿瘤。
我使用 @Image分析师 在过去的问题代码,并与其他代码结合,创建了这个代码。
附加图片
clc;%清除命令窗口。
关闭所有%关闭所有数据(imtool.除外)
清晰;删除所有已存在的变量。或者clearvars,如果你想的话。
工作空间;%确保显示工作区面板。
格式长g
格式紧凑的
字形大小= 25;
%===============================================================================
获取用户想要使用的映像的名称。
% baseFileName = 'pat00002_1-1-1-1-2-10-1.mp4.cover.png';
baseFileName =“mdb005.png”
获取完整的文件名,前面加上路径。
文件夹= [“C: \用户桌面\ \阿里\ Miaspng”];%确定演示文件夹的位置(适用于所有版本)。
fullFileName = fullfile(文件夹,baseFileName);
%===============================================================================
读取一个演示图像。
grayImage = imread (fullFileName);
%获取图像的尺寸。
对于灰度图像,% numberOfColorChannels = 1,对于RGB彩色图像,% numberOfColorChannels = 3。
[rows, columns, numberOfColorChannels] = size(grayImage);
如果numberOfColorChannels > 1
这并不是我们所期望的那种真正的灰度,而是彩色的。
%使用所有通道的加权和创建灰度图像。
grayImage = rgb2gray (grayImage);
%替代方法:通过只取绿色通道将其转换为灰度,
%,它在典型的快照中是噪声最小的通道。
% grayImage = grayImage(:,:, 2);%选择绿色通道。
结束
%显示图像。
次要情节(2、3、1);
imshow (grayImage []);
标题= sprintf (“原始灰度图像”);
标题(标题,“字形大小”字形大小,“翻译”“没有”);
drawnow;
惠普= impixelinfo ();
%设置图形属性:
%将数字放大到全屏。
集(gcf,“单位”“归一化”“OuterPosition”, [0 0 1 1]);
去掉图形顶部的工具栏和下拉菜单。
集(gcf,“工具栏”“没有”“菜单”“没有”);
给标题栏起一个名字。
集(gcf,“名字”“演示”“NumberTitle”“关闭”
drawnow;
meanIntensity =意味着(grayImage (:))
如果meanIntensity < 35
mask = grayImage > 190;
elseifmeanIntensity < 40
mask = grayImage > 185;
elseifmeanIntensity < 45
mask = grayImage > 182;
elseifmeanIntensity < 50
mask = grayImage > 175;
elseifmeanIntensity < 55
mask = grayImage > 170;
elseifmeanIntensity < 60
mask = grayImage > 165;
elseifmeanIntensity < 65
mask = grayImage > 155;
elseifmeanIntensity < 70
mask = grayImage > 150;
结束
%显示掩码图像。
次要情节(2、3、2);
imshow(面具);
图像%确保图像不会因为屏幕的宽高比而被人为拉伸。
标题(的二进制映像的面具“字形大小”、字形大小);
drawnow;
%找到区域
labeledImage = bwlabel(面具);
道具= regionprops (labeledImage,“区域”“重心”);
allAreas =([道具。区域),“下”);
allCentroids = [props.Centroid];
centroidsX = allCentroids(1:2:结束);
centroidsY = allCentroids(2:2:结束);
%留出图像大小的10%的空白。
margin = 0.34 * column;
margin = 0.15 * rows;
> < (columns - margin)) & . > < (columns - margin)...
(centroidsY > margin & centroidsY < (rows - margin));
指数=找到(管理员);
得到一个只有饲养员的面具
newMask = ismember(labeledImage, indexes);
%显示掩码图像。
次要情节(2、3、3);
imshow (newMask);
图像%确保图像不会因为屏幕的宽高比而被人为拉伸。
标题(“标签删除”“字形大小”、字形大小);
drawnow;
%蒙版灰度图像
maskedGrayImage = grayImage;%初始化。
maskedGrayImage (~ newMask) = 0;
显示蒙面灰度图像。
次要情节(2、3、4);
imshow (maskedGrayImage);
图像%确保图像不会因为屏幕的宽高比而被人为拉伸。
标题(“蒙面灰度图像”“字形大小”、字形大小);
drawnow;
IM_cb = imclearborder (maskedGrayImage);
BW2 = bwareaopen(IM_cb, 150);
BW_filled = imfill (BW2,“黑洞”);
次要情节(2、3、5);
%图,
imshow (BW_filled);
图像%确保图像不会因为屏幕的宽高比而被人为拉伸。
标题(“小行消除”“字形大小”、字形大小);
drawnow;
labeledImage = bwlabel (BW_filled);
测量= regionprops (labeledImage,“区域”);
把所有的区域都找出来
allAreas = [measurements.Area];
[biggestArea, indexOfBiggest] = sort(所有区域,“下”);
%提取最大
ismember(labeledImage, indexOfBiggest(1));
转换为二进制
biggestBlob = biggestBlob > 0;
次要情节(2、3、6);
%图,
imshow (biggestBlob []);
图像%确保图像不会因为屏幕的宽高比而被人为拉伸。
标题(“最后一次”“字形大小”、字形大小);
drawnow;

答案(1)

图像分析
图像分析 2021年5月16日
10评论
阿里Zulfikaroglu
阿里Zulfikaroglu 2021年6月7日
谢谢你 @Image分析师 为我所做的一切。你已经帮了很多忙了。我会想办法的

登录评论。

社区寻宝

在MATLAB中心找到宝藏,并发现社区如何可以帮助你!

开始狩猎!