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 如何获取灰度图像中某个区域的像素值?_Matlab_Image Processing - Fatal编程技术网

Matlab 如何获取灰度图像中某个区域的像素值?

Matlab 如何获取灰度图像中某个区域的像素值?,matlab,image-processing,Matlab,Image Processing,我想获得标记为红色矩形的区域的像素值。我想在此之后裁剪图像 以下代码将解决您的问题。但可以有几个更好的解决方案。下次请不要只是问问题,而是展示你已经尝试过的 % 20151116 % crop image by area clc; clear all; img = imread('xgOFu.png'); subplot(1,5,1); imshow(img); xl1 = xlim; title('Original'); imgr = img(:,:,1); subplot(1,5,2)

我想获得标记为红色矩形的区域的像素值。我想在此之后裁剪图像


以下代码将解决您的问题。但可以有几个更好的解决方案。下次请不要只是问问题,而是展示你已经尝试过的

% 20151116
% crop image by area

clc; clear all;

img = imread('xgOFu.png');
subplot(1,5,1);
imshow(img);
xl1 = xlim;
title('Original');

imgr = img(:,:,1);
subplot(1,5,2);
imshow(imgr);
xlim(xl1);
title('Red channel');

imgb = im2bw(imgr,.9);
subplot(1,5,3);
imshow(imgb);
xlim(xl1);
title('Binary');

s  = regionprops(imgb);

c1 = s.BoundingBox(1);
c2 = s.BoundingBox(1)+s.BoundingBox(3)-1;
r1 = s.BoundingBox(2);
r2 = s.BoundingBox(2)+s.BoundingBox(4)-1;

subplot(1,5,4);
imgc = imgb(r1:r2,c1:c2,:);
imshow(imgc);
xlim(xl1);
title('Crop with border');

s2  = regionprops(imcomplement(imgc));

c3 = s2.BoundingBox(1)+c1;
c4 = s2.BoundingBox(1)+s2.BoundingBox(3)-1+c1;
r3 = s2.BoundingBox(2)+r1;
r4 = s2.BoundingBox(2)+s2.BoundingBox(4)-1+r1;

imgc2 = img(r3:r4,c3:c4,:);
subplot(1,5,5);
imshow(imgc2);
xlim(xl1);
title('Crop without border');
输出:

更新了没有
regionprops
的旧版本的答案

% 20151116
% filter image by area 2

clc; clear all;

img = imread('xgOFu.png');
imgr = img(:,:,1);
imgb = im2bw(imgr,.9);

[r, c] = find(imgb(:,:,1)==1);
r1 = min(r);
r2 = max(r);
c1 = min(c);
c2 = max(c);
img2 = img(r1:r2,c1:c2,:);

img2r = img2(:,:,1);
img2b = im2bw(img2r,.9);

[r, c] = find(img2b(:,:)==0);
r1 = min(r);
r2 = max(r);
c1 = min(c);
c2 = max(c);
img3 = img2(r1:r2,c1:c2,:);
imshow(img3);

你的评论很难理解。您使用哪个版本的Matlab?似乎您的Matlab版本中没有regionprops。我将尝试更新解决方案。“你也要继续努力。”胡德尼说華得尼
regionprops
自R2006a之前就已提供。“旧”版本的MATLAB不是问题所在。自R2008以来,我一直使用
regionprops
。通过访问函数的文档页面并向下滚动到底部,您可以看到该函数是何时被引入MATLAB的。@xiao ji ji ji ji ji ji ji ji ji ji ji ji ji ji ji ji ji ji ji ji ji ji ji ji ji ji ji ji ji ji ji ji ji ji。对边界框属性的索引只返回一个数字,而您期望返回两个。所以这个代码没有问题。。。这就是你如何运行它。