【问题标题】:how to get an vertical histogram of an binary image and based on that histogram segment words from a row如何获取二进制图像的垂直直方图并基于该直方图从一行中分割单词
【发布时间】:2016-09-15 10:46:46
【问题描述】:

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

我试过imhist('image')但它没有显示投影它只在我的GUI轴上给出一个白框

a=imhist(Iedge2);
imshow(a,'Parent',handles.axes2);
title('HISTOGRAM OF DILATED IMAGE')

在这个iedge2中是反转的二值图像。

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

我已将屏幕截图合并到一个快照中,以便您在单个输出图像中轻松查看

【问题讨论】:

  • 将第二张图片顺时针旋转 90 度。在你的问题上多花点力气。一个人必须猜测你想要什么。阅读How to Ask

标签: image matlab image-processing histogram image-segmentation


【解决方案1】:

这是我正在寻找我的问题的代码

 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;

【讨论】:

    【解决方案2】:

    首先,您不是在寻找“垂直直方图”,而是在寻找垂直总和的条形图

    这是一个简化的例子。

    考虑这个输入图像

    您可以阅读并设置阈值

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

    现在您可以检查垂直总和

    sc = sum(bw,1);  %// sum columns
    figure;bar(sc);  
    

    如您所见,列中设置的像素是否超过 ~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
    

    结果

    【讨论】:

    • 执行此代码后,我将一张一张地获取这些图像,但在这里我将它们组合成一个
    • 我无法在评论中添加图片
    • @ayushibhatnagar 您可以编辑您的问题以添加图片
    • @ayushibhatnagar 这不是“先生”,而是“殿下”;)
    • 如何使用python而不是matlab来做到这一点?
    猜你喜欢
    • 2012-10-30
    • 2013-02-15
    • 2012-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    相关资源
    最近更新 更多