Image 如何获得二值图像的垂直直方图,并根据该直方图从一行中分割单词

Image 如何获得二值图像的垂直直方图,并根据该直方图从一行中分割单词,image,matlab,image-processing,histogram,image-segmentation,Image,Matlab,Image Processing,Histogram,Image Segmentation,假设我有一幅图像,其中有一些字母。基于这些字母,我想显示给定图像直方图在轴上的垂直投影: 我尝试了imhist('image'),但它没有显示投影,只是在我的GUI轴上显示了一个白色框 a=imhist(Iedge2); imshow(a,'Parent',handles.axes2); title('HISTOGRAM OF DILATED IMAGE') 在这个iedge2中是反转的二值图像 在得到垂直直方图后,我想将倒置的二值图像分割成垂直段,作为单词的句子/字母,其中有较少或没有白色

假设我有一幅图像,其中有一些字母。基于这些字母,我想显示给定图像直方图在轴上的垂直投影:

我尝试了
imhist('image')
,但它没有显示投影,只是在我的GUI轴上显示了一个白色框

a=imhist(Iedge2);
imshow(a,'Parent',handles.axes2);
title('HISTOGRAM OF DILATED IMAGE')
在这个
iedge2
中是反转的二值图像

在得到垂直直方图后,我想将倒置的二值图像分割成垂直段,作为单词的句子/字母,其中有较少或没有白色像素 我不知道该怎么办,请帮忙 先生,应用代码后,我得到以下输出

 clear all;
cd('C:\Users\IFIM\Desktop\New folder\KANND_HAND_SET');
myFolder = 'C:\Users\IFIM\Desktop\segment';
[filename, pathname] = uigetfile('*.bmp','Select image to be read.');
i= imread(fullfile(pathname,filename));
i=padarray(i,[0 10]);
verticalProjection = sum(i, 1);
set(gcf, 'Name', 'DEMO BY SOUMYADEEP', 'NumberTitle', 'Off') 
subplot(2, 2, 1);imshow(i); 
subplot(2,2,3);
plot(verticalProjection, 'b-');
grid on;
t = verticalProjection;
t(t==0) = inf;
mayukh=min(t)
% 0 where there is background, 1 where there are letters
letterLocations = verticalProjection > mayukh; 
% Find Rising and falling edges
d = diff(letterLocations);
startingColumns = find(d>0);
endingColumns = find(d<0);
% Extract each region
y=1;
for k = 1 : length(startingColumns)
  % Get sub image of just one character...
  subImage = i(:, startingColumns(k):endingColumns(k)); 
[L,num] = bwlabel(subImage);
for z= 1 : num
bw= ismember( L, z);
% Construct filename for this particular image.
baseFileName = sprintf('curvedimage %d.png', y);
 y=y+1;
% Prepend the folder to make the full file name.
fullFileName = fullfile(myFolder, baseFileName);
% Do the write to disk.
imwrite(bw, fullFileName);
subplot(2,2,4);
pause(2);
imshow(bw);
end;
y=y+1;
end;

我将屏幕截图合并到一个快照中,以便在输出的单个图像中很容易看到。首先,您不是在寻找“垂直直方图”,而是垂直和的条形图

这里有一个简化的例子

考虑此输入图像

您可以阅读并设置阈值

img = imread('http://i.stack.imgur.com/3YonG.png')
bw = img(:,:,1)<128;  %// convert to binary, text = 1

正如您所看到的,如果一列中设置了超过2个像素,那么这可能是一个字母。我们可以使用这个阈值

rm = sc > 2; 
cs = cumsum(~rm).*rm;  %// assign unique value to each "letter" columns
mask = bsxfun(@times, bw, cs );  %// seperate the letters in the mask
导致


首先,你不是在寻找一个“垂直直方图”,而是一个垂直和的条形图

这里有一个简化的例子

考虑此输入图像

您可以阅读并设置阈值

img = imread('http://i.stack.imgur.com/3YonG.png')
bw = img(:,:,1)<128;  %// convert to binary, text = 1

正如您所看到的,如果一列中设置了超过2个像素,那么这可能是一个字母。我们可以使用这个阈值

rm = sc > 2; 
cs = cumsum(~rm).*rm;  %// assign unique value to each "letter" columns
mask = bsxfun(@times, bw, cs );  %// seperate the letters in the mask
导致


这是我在寻找问题的代码

 clear all;
cd('C:\Users\IFIM\Desktop\New folder\KANND_HAND_SET');
myFolder = 'C:\Users\IFIM\Desktop\segment';
[filename, pathname] = uigetfile('*.bmp','Select image to be read.');
i= imread(fullfile(pathname,filename));
i=padarray(i,[0 10]);
verticalProjection = sum(i, 1);
set(gcf, 'Name', 'DEMO BY SOUMYADEEP', 'NumberTitle', 'Off') 
subplot(2, 2, 1);imshow(i); 
subplot(2,2,3);
plot(verticalProjection, 'b-');
grid on;
t = verticalProjection;
t(t==0) = inf;
mayukh=min(t)
% 0 where there is background, 1 where there are letters
letterLocations = verticalProjection > mayukh; 
% Find Rising and falling edges
d = diff(letterLocations);
startingColumns = find(d>0);
endingColumns = find(d<0);
% Extract each region
y=1;
for k = 1 : length(startingColumns)
  % Get sub image of just one character...
  subImage = i(:, startingColumns(k):endingColumns(k)); 
[L,num] = bwlabel(subImage);
for z= 1 : num
bw= ismember( L, z);
% Construct filename for this particular image.
baseFileName = sprintf('curvedimage %d.png', y);
 y=y+1;
% Prepend the folder to make the full file name.
fullFileName = fullfile(myFolder, baseFileName);
% Do the write to disk.
imwrite(bw, fullFileName);
subplot(2,2,4);
pause(2);
imshow(bw);
end;
y=y+1;
end;
全部清除;
cd('C:\Users\IFIM\Desktop\New folder\KANND\u HAND\u SET');
myFolder='C:\Users\IFIM\Desktop\segment';
[文件名,路径名]=uigetfile(“*.bmp”,“选择要读取的图像”);
i=imread(完整文件(路径名、文件名));
i=焊盘阵列(i,[0 10]);
垂直投影=总和(i,1);
设置(gcf、“名称”、“SOUMYADEEP演示”、“编号”、“关闭”)
子地块(2,2,1);imshow(i);
子批次(2,2,3);
地块(垂直投影,“b-”);
网格化;
t=垂直投影;
t(t==0)=inf;
mayukh=最小值(t)
%有背景的0,有字母的1
字母位置=垂直投影>mayukh;
%找到上升和下降的边缘
d=差异(字母位置);
startingColumns=find(d>0);

endingColumns=find(d这是我在寻找问题的代码

 clear all;
cd('C:\Users\IFIM\Desktop\New folder\KANND_HAND_SET');
myFolder = 'C:\Users\IFIM\Desktop\segment';
[filename, pathname] = uigetfile('*.bmp','Select image to be read.');
i= imread(fullfile(pathname,filename));
i=padarray(i,[0 10]);
verticalProjection = sum(i, 1);
set(gcf, 'Name', 'DEMO BY SOUMYADEEP', 'NumberTitle', 'Off') 
subplot(2, 2, 1);imshow(i); 
subplot(2,2,3);
plot(verticalProjection, 'b-');
grid on;
t = verticalProjection;
t(t==0) = inf;
mayukh=min(t)
% 0 where there is background, 1 where there are letters
letterLocations = verticalProjection > mayukh; 
% Find Rising and falling edges
d = diff(letterLocations);
startingColumns = find(d>0);
endingColumns = find(d<0);
% Extract each region
y=1;
for k = 1 : length(startingColumns)
  % Get sub image of just one character...
  subImage = i(:, startingColumns(k):endingColumns(k)); 
[L,num] = bwlabel(subImage);
for z= 1 : num
bw= ismember( L, z);
% Construct filename for this particular image.
baseFileName = sprintf('curvedimage %d.png', y);
 y=y+1;
% Prepend the folder to make the full file name.
fullFileName = fullfile(myFolder, baseFileName);
% Do the write to disk.
imwrite(bw, fullFileName);
subplot(2,2,4);
pause(2);
imshow(bw);
end;
y=y+1;
end;
全部清除;
cd('C:\Users\IFIM\Desktop\New folder\KANND\u HAND\u SET');
myFolder='C:\Users\IFIM\Desktop\segment';
[文件名,路径名]=uigetfile(“*.bmp”,“选择要读取的图像”);
i=imread(完整文件(路径名、文件名));
i=焊盘阵列(i,[0 10]);
垂直投影=总和(i,1);
设置(gcf、“名称”、“SOUMYADEEP演示”、“编号”、“关闭”)
子地块(2,2,1);imshow(i);
子批次(2,2,3);
地块(垂直投影,“b-”);
网格化;
t=垂直投影;
t(t==0)=inf;
mayukh=最小值(t)
%有背景的0,有字母的1
字母位置=垂直投影>mayukh;
%找到上升和下降的边缘
d=差异(字母位置);
startingColumns=find(d>0);

endingColumns=find(d将第二幅图像顺时针旋转90度。在你的问题上投入更多的精力。你必须猜出你想要什么。阅读将第二幅图像顺时针旋转90度。在你的问题上投入更多的精力。你必须猜出你想要什么。阅读执行此代码后,我将一个接一个地获取这些图像,但在这里,我将它们组合成一个单独的图像onei无法在中添加图像comment@ayushibhatnagar您可以编辑要添加的问题images@ayushibhatnagar不是“先生”,而是“殿下”)如何使用python而不是matlab来实现这一点?在执行完这段代码后,我一个接一个地得到了这些图像,但在这里,我将它们合并到一个图像中,我无法添加图像comment@ayushibhatnagar您可以编辑要添加的问题images@ayushibhatnagar不是“先生”,而是“殿下”)如何使用python而不是matlab实现这一点?