Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从MATLAB中由4个角点指定的图像中裁剪出一部分_Matlab_Image Processing - Fatal编程技术网

如何从MATLAB中由4个角点指定的图像中裁剪出一部分

如何从MATLAB中由4个角点指定的图像中裁剪出一部分,matlab,image-processing,Matlab,Image Processing,我只希望在此图像中裁剪由红线闭合的部分:- 我有四个角点(x1,y1),(x2,y2),(x3,y3),(x4,y4)。我尝试了imcrop,但那是矩形裁剪。输出图像需要是RGB。我使用谷歌搜索查找您的:- 现在,如果我正确理解你的问题,这就是你想要的: I=imread('nYNKB.jpg'); Isize = size(I); mask = poly2mask([43 214 227 123],[131 22 112 198],Isize(1,1),Isize(1,2)); % wh

我只希望在此图像中裁剪由红线闭合的部分:-


我有四个角点
(x1,y1)
(x2,y2)
(x3,y3)
(x4,y4)
。我尝试了
imcrop
,但那是矩形裁剪。输出图像需要是RGB。

我使用谷歌搜索查找您的:-

现在,如果我正确理解你的问题,这就是你想要的:

I=imread('nYNKB.jpg');
Isize = size(I);

mask = poly2mask([43 214 227 123],[131 22 112 198],Isize(1,1),Isize(1,2));
% where [x1,x2,x3,x4] = [43 214 227 123] & [y1,y2,y3,y4] = [131 22 112 198]

I_masked = bsxfun(@times,I,cast(mask,class(I)));

subplot(1,2,1)
imshow(I);
title('Original Image')

subplot(1,2,2)
imshow(I_masked)
title('Masked Image')
输出:-


编辑:- 如果您不想要黑色背景,您可以选择以下选项:

figure(2)
mask = bsxfun(@eq,I_masked,reshape([0 0 0],1,1,3));
image(I_masked,'alphadata',1-double(all(mask,3)));
axis off
title('Masked Image')
输出:-

I = rgb2gray(imread('nYNKB.jpg'));
imshow(I);
h = imfreehand; 
M = ~h.createMask();
I(M) = 0;
imshow(I);



替代解决方案(如果输出不必是RGB):-

I = rgb2gray(imread('nYNKB.jpg'));
imshow(I);
h = imfreehand; 
M = ~h.createMask();
I(M) = 0;
imshow(I);


我使用谷歌搜索查找您的:-

现在,如果我正确理解你的问题,这就是你想要的:

I=imread('nYNKB.jpg');
Isize = size(I);

mask = poly2mask([43 214 227 123],[131 22 112 198],Isize(1,1),Isize(1,2));
% where [x1,x2,x3,x4] = [43 214 227 123] & [y1,y2,y3,y4] = [131 22 112 198]

I_masked = bsxfun(@times,I,cast(mask,class(I)));

subplot(1,2,1)
imshow(I);
title('Original Image')

subplot(1,2,2)
imshow(I_masked)
title('Masked Image')
输出:-


编辑:- 如果您不想要黑色背景,您可以选择以下选项:

figure(2)
mask = bsxfun(@eq,I_masked,reshape([0 0 0],1,1,3));
image(I_masked,'alphadata',1-double(all(mask,3)));
axis off
title('Masked Image')
输出:-

I = rgb2gray(imread('nYNKB.jpg'));
imshow(I);
h = imfreehand; 
M = ~h.createMask();
I(M) = 0;
imshow(I);



替代解决方案(如果输出不必是RGB):-

I = rgb2gray(imread('nYNKB.jpg'));
imshow(I);
h = imfreehand; 
M = ~h.createMask();
I(M) = 0;
imshow(I);


您希望生成的图像(矩阵)是什么形状?生成的图像的形状将与红色方框图相同幸运的是,图像和矩阵是矩形的。您希望生成的图像(矩阵)是什么形状?生成的图像的形状将与红色方框图相同幸运的是,图像和矩阵是矩形的。谢谢!但是有没有办法只显示由四个角点包围的部分。我的意思是,在你的代码中,它获取整个图像,然后进行掩蔽,以给出最终的输出。但是如何仅显示原始图像的裁剪部分?@Rifat!我从你上面的评论中了解到,你想要一个矩阵,它的某些索引中没有元素。这在数学上是不可能的@里法特正如我在上面的评论中所说,图像是矩形的。您可以裁剪到多边形的边界矩形,以获得原始图像的较小区域,但它始终是矩形。@请查看最新编辑!!你会发现它更有用!!谢谢但是有没有办法只显示由四个角点包围的部分。我的意思是,在你的代码中,它获取整个图像,然后进行掩蔽,以给出最终的输出。但是如何仅显示原始图像的裁剪部分?@Rifat!我从你上面的评论中了解到,你想要一个矩阵,它的某些索引中没有元素。这在数学上是不可能的@里法特正如我在上面的评论中所说,图像是矩形的。您可以裁剪到多边形的边界矩形,以获得原始图像的较小区域,但它始终是矩形。@请查看最新编辑!!你会发现它更有用!!