Matlab 用像素值“填充剩余区域”;0“;
在下图中,我用两种不同的色调填充了两个区域: 如何在Matlab 用像素值“填充剩余区域”;0“;,matlab,Matlab,在下图中,我用两种不同的色调填充了两个区域: 如何在MATLAB中用像素值0(黑色)填充图像的剩余部分(未填充部分) 谢谢。尝试在两个灰色形状中拾取点,然后将其他所有的点都涂掉 img = imread(myimagefilename); imshow(img); % you can skip the following part and set clr1 and clr2 manually % if you already know the grayscale values in the
MATLAB
中用像素值0
(黑色)填充图像的剩余部分(未填充部分)
谢谢。尝试在两个灰色形状中拾取点,然后将其他所有的点都涂掉
img = imread(myimagefilename);
imshow(img);
% you can skip the following part and set clr1 and clr2 manually
% if you already know the grayscale values in the patches
pts=ginput(2); % <-- pick points within the regions you colored in
clr1=img(pts(1,2),pts(1,1));
clr2=img(pts(2,2),pts(2,1));
img2=img;
img2(find(img~=clr1 & img~=clr2)) = 0;
img2=im2bw(img2,0.2); % <-- 0.2 is the threshold
[xxx idx1]= bwfill(~img2,pts(1,1),pts(1,2),8);
[xxx idx2]= bwfill(~img2,pts(2,1),pts(2,2),8);
idx=setxor(union(idx1,idx2),[1:numel(img)]);
img2 = img;
img2(idx)=0;
imshow(img2)
img=imread(myimagefilename);
imshow(img);
%您可以跳过以下部分并手动设置clr1和clr2
%如果已经知道面片中的灰度值
pts=ginput(2);% 尝试在这两个灰色形状中拾取点,然后将其他所有点都涂成黑色
img = imread(myimagefilename);
imshow(img);
% you can skip the following part and set clr1 and clr2 manually
% if you already know the grayscale values in the patches
pts=ginput(2); % <-- pick points within the regions you colored in
clr1=img(pts(1,2),pts(1,1));
clr2=img(pts(2,2),pts(2,1));
img2=img;
img2(find(img~=clr1 & img~=clr2)) = 0;
img2=im2bw(img2,0.2); % <-- 0.2 is the threshold
[xxx idx1]= bwfill(~img2,pts(1,1),pts(1,2),8);
[xxx idx2]= bwfill(~img2,pts(2,1),pts(2,2),8);
idx=setxor(union(idx1,idx2),[1:numel(img)]);
img2 = img;
img2(idx)=0;
imshow(img2)
img=imread(myimagefilename);
imshow(img);
%您可以跳过以下部分并手动设置clr1和clr2
%如果已经知道面片中的灰度值
pts=ginput(2);% 假设这两个区域的像素值的值被称为val_1
和val_2
,您可以这样做:
算法
获取两个图像,一个图像的所有内容(除val_1
设置为0外)都设置为0,另一个图像的val_2
设置为0。这很可能也包含很多噪声点
这两个图像具有适当阈值大小的遮罩。这将消除该值不在区域中的点
结果图像的高区域与原始图像中连接的组件相对应
根据需要更改相应图像中高区域的阴影,并添加它们以获得结果图像
如果阴影事先不知道,您可以使用@TryHard的答案所示的ginput
。假设这两个区域的像素值的值被称为val_1
和val_2
,您可以这样做:
算法
获取两个图像,一个图像的所有内容(除val_1
设置为0外)都设置为0,另一个图像的val_2
设置为0。这很可能也包含很多噪声点
这两个图像具有适当阈值大小的遮罩。这将消除该值不在区域中的点
结果图像的高区域与原始图像中连接的组件相对应
根据需要更改相应图像中高区域的阴影,并添加它们以获得结果图像
如果事先不知道阴影,您可以使用ginput
,如@TryHard的回答所示。假设这是后续操作,当您获取roi时,您可以使用它来创建上面的图像,而不是或除了使用它之外,还可以使用它来创建黑色背景的图像。这避免了在图像中其他位置具有相同值的任何问题(归功于to对上一个问题的回答):
或者,如果以后要再次使用,可以将区域存储为单个BW遮罩:
imshow(img);
% create masks
roi = imfreehand(gca);
BW = roi.createMask;
roi2 = imfreehand(gca);
BW2 = roi.createMask;
% original image + roi
img2 = img;
img2(BW) = val_1;
img2(BW2) = val_2;
% B&W image
img3 = BW*val_1+BW2*val_2;
假设这是一个后续步骤,当您获取roi时,除了使用它来创建上面的图像之外,您还可以使用它来创建具有黑色背景的图像。这避免了在图像中其他位置具有相同值的任何问题(归功于to对上一个问题的回答):
或者,如果以后要再次使用,可以将区域存储为单个BW遮罩:
imshow(img);
% create masks
roi = imfreehand(gca);
BW = roi.createMask;
roi2 = imfreehand(gca);
BW2 = roi.createMask;
% original image + roi
img2 = img;
img2(BW) = val_1;
img2(BW2) = val_2;
% B&W image
img3 = BW*val_1+BW2*val_2;
您可以使用matlab文件交换(以下或以下)中的简单单种子区域生长
函数(或其等效函数之一)。此函数将创建一个逻辑掩码,可用于使图像变黑(对多个区域连续调用此函数)
I=im2double(imread('5Yo8l.png');
J=羊角面包区域(0.01,I,0,0)
imshow(I+J);
函数Phi=羊角面包区域(公差、Igray、x、y)
如果(x==0 | | y==0)
imshow(Igray);
[y,x]=ginput(1);%%%小心这里的(x,y)混淆
结束
Phi=假(大小(Igray,1),大小(Igray,2));
ref=真(尺寸(Igray,1),尺寸(Igray,2));
PhiOld=Phi;
φ(uint8(x),uint8(y))=1;
while(sum(Phi(:)~=sum(PhiOld(:))
PhiOld=Phi;
segm_val=Igray(Phi);
平均值seg=平均值(segm_val);
Posvoisisnsphi=imdeplate(Phi,strel('disk',1,0))-Phi;
voisins=find(posVoisinsPhi);
valeursVoisins=Igray(voisins);
Phi(沃伊辛(沃伊辛>平均塞格-公差&沃伊辛<平均塞格+公差))=1;
结束
您可以使用matlab文件交换(以下或以下)中的简单单种子区域生长
函数(或其等效函数之一)。此函数将创建一个逻辑掩码,可用于使图像变黑(对多个区域连续调用此函数)
I=im2double(imread('5Yo8l.png');
J=羊角面包区域(0.01,I,0,0)
imshow(I+J);
函数Phi=羊角面包区域(公差、Igray、x、y)
如果(x==0 | | y==0)
imshow(Igray);
[y,x]=ginput(1);%%%小心这里的(x,y)混淆
结束
Phi=假(大小(Igray,1),大小(Igray,2));
ref=真(尺寸(Igray,1),尺寸(Igray,2));
PhiOld=Phi;
φ(uint8(x),uint8(y))=1;
while(sum(Phi(:)~=sum(PhiOld(:))
PhiOld=Phi;
segm_val=Igray(Phi);
平均值seg=平均值(segm_val);
Posvoisisnsphi=imdeplate(Phi,strel('disk',1,0))-Phi;
voisins=find(posVoisinsPhi);
valeursVoisins=Igray(voisins);
Phi(沃伊辛(沃伊辛>平均塞格-公差&沃伊辛<平均塞格+公差))=1;
结束
这是否也会给出很多噪声点?这些区域不需要有与图像其他部分不同的阴影。@Roneymael你说得对,我选择了一个非常快速和肮脏的解决方案。我将不得不改变它,以消除残羹剩饭。这不会给很多噪音点,以及?这些区域不需要有阴影