我是MATLAB& amp;利用MATLAB开发“稻米品质鉴定”应用神经网络。对于我的指导,我更喜欢这个Research Paper
此应用程序包含5个阶段
我现在处于第三阶段,已经为此应用程序开发了初始步骤
步骤1:从计算机浏览图像并显示
% Get the orginal image & show , Figure 1
[fileName, pathName] = uigetfile('*.jpg;*.tif;*.png;*.gif','Select the Picture file');
I = fullfile(pathName, fileName);
I = imread(I);
imshow(I)
第2步:背景扣除
% selected rice image Background subtraction , Figure 2
% Use Morphological Opening to Estimate the Background
background = imopen(I,strel('disk',7));
I2 = I - background;
figure, imshow(I2);
第3步:
% get the Black and white Image , Figure 3
% output image BW replaces all pixels in the input image with luminance greater than 0.17 level
BW = im2bw(I2,0.17);
figure, imshow(BW)
第4步:
% Remove small objects fewer than 30 pixels from binary image
pure = bwareaopen(BW,30);
figure, imshow(pure)
第5步:标记
% Label Black and white & Image bounding box around each object
L=bwlabel(pure,8);
bb=regionprops(L,'BoundingBox');
我从2天开始就坚持第6步了。步骤6使用标记二进制图像从原始图像裁剪多个对象
这正是输出应该如下图所示,
如果我能得到这个,我可以轻松计算原始图像中每个对象的形态特征和颜色特征,用于第4阶段。
形态特征
1.Area for each Object
2.scale of X, Y axis for each object in above picture
3.using X, Y axis I can Calculate Aspect Ratio
颜色特征
1. Red Mean
2. Green Mean
3. Blue Mean
您能否解释一下使用Labeled Binary Image 从原始图像裁剪多个对象的方法,即第6步。
答案 0 :(得分:0)
如果我正确地解释第6步,我相信它所说的是他们希望你使用你拥有的二进制地图在第5步之后分割出最终对象产生的。根据您的评论,您还希望提取步骤#5中描述的边界框。如果是这种情况,那么您所要做的就是使用RegionProps
中定义的bb
结构来帮助我们为您完成此操作。作为对您的一点评论,从图像中提取的每个对象的BoundingBox
结构的RegionProps
字段返回一个包含4个数字的数组,如下所示:
[x y w h]
x
表示列/水平坐标,y
表示行/垂直坐标,w,h
表示边界框的宽度和高度。
您需要做的就是创建一个二进制地图,并循环浏览每个边界框以描绘我们需要切出图像的位置。完成后,使用此二进制映射来提取像素。换句话说:
%//Initialize map to zero
bMap = false(size(pure));
%//Go through each bounding box
for i = 1 : numel(bb)
%//Get the i'th bounding box
bbox = bb(i).BoundingBox;
%//Set this entire rectangle to true
%//Make sure we cast off any decimal
%//co-ordinates as the pixel locations
%//are integer
bbox = floor(bbox);
bMap(bbox(2):bbox(4), bbox(1):bbox(3)) = true;
end
%//Now extract our regions
out = zeros(size(I));
out = cast(out, class(I)); %//Ensures compatible types
%//Extract cropped out regions for each channel
for i = 1 : size(out,3)
chanOut = out(:,:,i);
chanIm = I(:,:,i);
chanOut(bMap) = chanIm(bMap);
out(:,:,i) = chanOut;
end
这将创建一个存储在out
中的输出图像,并根据步骤5中给出的每个边界框仅复制每个通道上的真实像素。
我相信这就是步骤#6所说的。如果我已正确解释这一点,请告诉我。