如何在matlab中的灰色二进制图像中绘制矩形

时间:2015-02-15 17:47:24

标签: image matlab image-processing matlab-cvst

我是 matlab 的新手。我正在撰写关于手写文本文档分割的论文。在此我需要在灰色二进制图像中绘制彩色矩形并显示它。我使用了 ShapeInserter 。这是我的代码。

file_name = 'test4.jpg';
image = imread(strcat('E:\ARIF\Studying Related\L-4 T-1\CSE-400(Project and Thesis)\Matlab Program\images\',file_name));
figure('name','Main Image'),imshow(image);
gray_image=rgb2gray(image);
level = graythresh(gray_image);
%display(level);
binary_image = im2bw(image,level);

shapeInserter = vision.ShapeInserter('Shape','Rectangles','BorderColor','Custom', 'CustomBorderColor', uint8([255 0 0]));
rect = int16([10, 10, 100, 100]);
rgb = repmat(binary_image, [1, 1, 3]);
img1 = step(shapeInserter, rgb, rect);
figure('name','Edited Image'),imshow(img1);

但是我收到了这个错误。

  

使用images.internal.imageDisplayValidateParams> validateCData(第119行)时出错>如果输入是逻辑(二进制),则必须是二维的。

     

images.internal.imageDisplayValidateParams(第27行)出错   common_args.CData = validateCData(common_args.CData,image_type);

     

images.internal.imageDisplayParseInputs中的错误(第78行)   common_args = images.internal.imageDisplayValidateParams(common_args);

     

imshow中的错误(第227行)
  [common_args,specific_args] = ...

     

draw_rectangle_inside_image错误(第13行)
  figure('name','Edited Image'),imshow(img1);

如果我改变这一行“ rgb = repmat(binary_image,[1,1,3]); ”to this“ rgb = ind2rgb(binary_image,[1,1,3] ]); “我得到一个红色的矩形,但不是我想要放置红色矩形的图像。我已经尝试解决这个问题将近4天而且失败了。请尽快帮助我用适当的测试解决方案来解决这个问题。

1 个答案:

答案 0 :(得分:1)

专门查看错误的第一部分:

  

Error using images.internal.imageDisplayValidateParams>validateCData(line 119) >If input is logical (binary), it must be two-dimensional.

shapeInserter期望输入是2D 二进制图像。但是,由于您的repmat电话,您的图片是3D二进制图片。如果图片为3D(多渠道),则必须属于uint8/uint16/uint32,而不是logical /二进制。

实际上,您无需复制通道以使用shapeInserter将图形绘制到图像上。您只需使用二进制图像即可。但是,因为我不知道你最终将使用它的应用程序,我将假设你需要二进制图像的RGB表示。

因此,在您将图片转换为二进制文件后,将其转换回uint8

只需使用im2uint8将图片类型更改回uint8

%// YOUR CODE
file_name = 'test4.jpg';
image = imread(strcat('E:\ARIF\Studying Related\L-4 T-1\CSE-400(Project and Thesis)\Matlab Program\images\',file_name));
figure('name','Main Image'),imshow(image);
gray_image=rgb2gray(image);
level = graythresh(gray_image);
%display(level);
binary_image = im2bw(image,level);

%// NEW CODE
binary_image = im2uint8(binary_image);

%// YOUR CODE FROM BEFORE
shapeInserter = vision.ShapeInserter('Shape','Rectangles','BorderColor','Custom', 'CustomBorderColor', uint8([255 0 0]));
rect = int16([10, 10, 100, 100]);
rgb = repmat(binary_image, [1, 1, 3]);
img1 = step(shapeInserter, rgb, rect);
figure('name','Edited Image'),imshow(img1);

在股票图片(cameraman.tif)上运行代码,只需对代码稍加补充,这就是我得到的:

enter image description here