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。对边界框属性的索引只返回一个数字,而您期望返回两个。所以这个代码没有问题。。。这就是你如何运行它。