matlab中的行和列拆分
我有这张图片(附件),我想分割数量栏和价格栏,但我不知道怎么分割?!用什么函数来帮助我呢 任何帮助都将不胜感激。谢谢matlab中的行和列拆分,matlab,image-processing,computer-vision,image-segmentation,Matlab,Image Processing,Computer Vision,Image Segmentation,我有这张图片(附件),我想分割数量栏和价格栏,但我不知道怎么分割?!用什么函数来帮助我呢 任何帮助都将不胜感激。谢谢 利用输入图像的规则结构,您可以执行以下操作: img = imread('http://i.stack.imgur.com/SuKT2.jpg'); %//read image bw = sum(img,3) < 10; %//convert to binary mask 现在我们可以忽略前8行(页眉)和最后两行页脚 sbw = lbw > 8 & lbw
利用输入图像的规则结构,您可以执行以下操作:
img = imread('http://i.stack.imgur.com/SuKT2.jpg'); %//read image
bw = sum(img,3) < 10; %//convert to binary mask
现在我们可以忽略前8行(页眉)和最后两行页脚
sbw = lbw > 8 & lbw < max(lines)- 2; %// select only the relevant lines
可视化生成的边界框
figure;imshow( img, 'border','tight' );hold on;
rectangle('Position', st(1).BoundingBox, 'EdgeColor','r','LineWidth',2);
rectangle('Position', st(2).BoundingBox, 'EdgeColor','r','LineWidth',2);
导致
给定边界框,它相当容易裁剪
col1 = imcrop( img, st(1).BoundingBox ); %// crop the description of the products
col2 = imcrop( img, st(2).BoundingBox ); %// crop the prices
利用输入图像的规则结构,您可以执行以下操作:
img = imread('http://i.stack.imgur.com/SuKT2.jpg'); %//read image
bw = sum(img,3) < 10; %//convert to binary mask
现在我们可以忽略前8行(页眉)和最后两行页脚
sbw = lbw > 8 & lbw < max(lines)- 2; %// select only the relevant lines
可视化生成的边界框
figure;imshow( img, 'border','tight' );hold on;
rectangle('Position', st(1).BoundingBox, 'EdgeColor','r','LineWidth',2);
rectangle('Position', st(2).BoundingBox, 'EdgeColor','r','LineWidth',2);
导致
给定边界框,它相当容易裁剪
col1 = imcrop( img, st(1).BoundingBox ); %// crop the description of the products
col2 = imcrop( img, st(2).BoundingBox ); %// crop the prices
利用输入图像的规则结构,您可以执行以下操作:
img = imread('http://i.stack.imgur.com/SuKT2.jpg'); %//read image
bw = sum(img,3) < 10; %//convert to binary mask
现在我们可以忽略前8行(页眉)和最后两行页脚
sbw = lbw > 8 & lbw < max(lines)- 2; %// select only the relevant lines
可视化生成的边界框
figure;imshow( img, 'border','tight' );hold on;
rectangle('Position', st(1).BoundingBox, 'EdgeColor','r','LineWidth',2);
rectangle('Position', st(2).BoundingBox, 'EdgeColor','r','LineWidth',2);
导致
给定边界框,它相当容易裁剪
col1 = imcrop( img, st(1).BoundingBox ); %// crop the description of the products
col2 = imcrop( img, st(2).BoundingBox ); %// crop the prices
利用输入图像的规则结构,您可以执行以下操作:
img = imread('http://i.stack.imgur.com/SuKT2.jpg'); %//read image
bw = sum(img,3) < 10; %//convert to binary mask
现在我们可以忽略前8行(页眉)和最后两行页脚
sbw = lbw > 8 & lbw < max(lines)- 2; %// select only the relevant lines
可视化生成的边界框
figure;imshow( img, 'border','tight' );hold on;
rectangle('Position', st(1).BoundingBox, 'EdgeColor','r','LineWidth',2);
rectangle('Position', st(2).BoundingBox, 'EdgeColor','r','LineWidth',2);
导致
给定边界框,它相当容易裁剪
col1 = imcrop( img, st(1).BoundingBox ); %// crop the description of the products
col2 = imcrop( img, st(2).BoundingBox ); %// crop the prices
是否尝试?是否确实要创建两个新图像或从图像中提取数据?是否尝试?是否确实要创建两个新图像或从图像中提取数据?是否尝试?是否确实要创建两个新图像或从图像中提取数据?是否尝试?你真的想创建两个新图像还是想从图像中提取数据?@Shai谢谢你的帮助,我很感激,但有些事情我无法理解,比如:1-lbw=bsxfun(@times,single(bw),line);为什么我要做这一步?!2-尽管阈值=4可以给出相同的结果,但为什么选择10作为阈值@user3903128(1)请在调试模式下运行代码,可视化
bw
和行
,然后检查bsxfun
的乘法结果-此操作基本上为每个文本行提供不同的标签。(2) 我任意选择了阈值10,也可能是4也一样好。@shai这就是我所做的(在调试模式下查看整个代码),但我无法理解它的逻辑。如果你能给我解释一下,我将不胜感激me@user3903128行
是一个1D(不是2D)向量,用于计算每个图像行的“文本”像素数。文本行之间的图像行具有零“文本”像素,因此它们的行
值为零。为了标记与同一文本行对应的所有图像行,我使用了bwlabel
命令。你可以图形;绘图(总和(bw,2)>1);等等图(线)
查看每个图像行如何与不同的文本行关联。要将此1D表示转换为所有文本像素的标签,我使用bsxfun
将其与掩码bw
的每一列相乘,得到一个掩码,其中每一文本行都有不同的标签。@谢谢您的解释,但您能解释一下这一行吗:col=bwlabel(imfilter(single)(sum(sbw,1)<1),one(1,15)/15、“对称”、“相同”)<.9);我真的很感激你对我的耐心me@Shai谢谢你的帮助,我很感激,但是有些事情我不能理解,比如:1-lbw=bsxfun(@times,single(bw),line);为什么我要做这一步?!2-尽管阈值=4可以给出相同的结果,但为什么选择10作为阈值@user3903128(1)请在调试模式下运行代码,可视化bw
和行
,然后检查bsxfun
的乘法结果-此操作基本上为每个文本行提供不同的标签。(2) 我任意选择了阈值10,也可能是4也一样好。@shai这就是我所做的(在调试模式下查看整个代码),但我无法理解它的逻辑。如果你能给我解释一下,我将不胜感激me@user3903128行
是一个1D(不是2D)向量,用于计算每个图像行的“文本”像素数。文本行之间的图像行具有零“文本”像素,因此它们的行
值为零。为了标记与同一文本行对应的所有图像行,我使用了bwlabel
命令。你可以图形;绘图(总和(bw,2)>1);等等图(线)
查看每个图像行如何与不同的文本行关联。要将此1D表示转换为所有文本像素的标签,我使用bsxfun
将其与掩码bw
的每一列相乘,得到一个掩码,其中每一文本行都有不同的标签。@谢谢您的解释,但您能解释一下这一行吗:col=bwlabel(imfilter(single)(sum(sbw,1)<1),one(1,15)/15、“对称”、“相同”)<.9);我真的很感激你对我的耐心me@Shai谢谢你的帮助,我很感激,但是有些事情我不能理解,比如:1-lbw=bsxfun(@times,single(bw),line);为什么我要做这一步?!2-尽管阈值=4可以给出相同的结果,但为什么选择10作为阈值@user3903128(1)请在调试模式下运行代码,可视化bw
和行
,然后检查bsxfun
的乘法结果-此操作基本上为每个文本行提供不同的标签。(2) 我任意选择了阈值10,也可能是4也一样好。@shai这就是我所做的(在调试模式下查看整个代码),但我无法理解它的逻辑。如果你能给我解释一下,我将不胜感激