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

how to draw rectangle inside a gray binary image in matlab

我是 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);

但是我收到了这个错误。

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

Error in images.internal.imageDisplayValidateParams (line 27) common_args.CData = validateCData(common_args.CData,image_type);

Error in images.internal.imageDisplayParseInputs (line 78) common_args = images.internal.imageDisplayValidateParams(common_args);

Error in imshow (line 227)
[common_args,specific_args] = ...

Error in draw_rectangle_inside_image (line 13)
figure('name','Edited Image'),imshow(img1);

如果我将此行“rgb = repmat(binary_image, [1, 1, 3]);”更改为“rgb = ind2rgb(binary_image, [1, 1, 3]); “我得到一个红色矩形,但不是我想要放置红色的图像 rectangle.I 已经尝试解决这个问题近 4 天但失败了。尽快通过适当的测试解决方案帮助我解决这个问题尽可能。

具体看你错误的第一部分:

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

shapeInserter 期望输入是 2D binary 图像。但是,由于您的 repmat 调用,您的图像是 3D 二值图像。如果图像是 3D(多通道),它 必须 类型 uint8/uint16/uint32,而不是 logical / 二进制。

您实际上不需要复制通道来使用 shapeInserter 在图像上绘制形状。您可以简单地使用二进制图像。但是,因为我不知道您最终要将其用于什么应用程序,所以我假设您需要二值图像的 RGB 表示。

因此,在将图像转换为二进制后,立即将其转换回 uint8

只需将图片类型改回 uint8im2uint8:

%// 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),加上我对您的代码所做的轻微添加,这就是我得到的: