Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image 在matlab中用水平旋转法检测图像中文本的角度_Image_Matlab_Image Processing_Computer Vision_Text Rotation - Fatal编程技术网

Image 在matlab中用水平旋转法检测图像中文本的角度

Image 在matlab中用水平旋转法检测图像中文本的角度,image,matlab,image-processing,computer-vision,text-rotation,Image,Matlab,Image Processing,Computer Vision,Text Rotation,见下图: 正如您在图像中看到的,写入的文本旋转了90度角,我只想将文本旋转为水平。通过旋转的角度,我想使其水平,如下所示: 我不希望完整的图像被旋转。我只希望文本有边界,文本旋转的角度被测量,然后旋转该角度使其水平 你能给我一个这样做的建议,然后在文本上加一个椭圆吗 谢谢。首先,让我们找到所有暗像素的x-y坐标 bw = imread('http://i.imgur.com/0LxC6bd.png'); bw = min( bw, [], 3 ) < 50 ; % dark pixel

见下图:

正如您在图像中看到的,写入的文本旋转了90度角,我只想将文本旋转为水平。通过旋转的角度,我想使其水平,如下所示:

我不希望完整的图像被旋转。我只希望文本有边界,文本旋转的角度被测量,然后旋转该角度使其水平

你能给我一个这样做的建议,然后在文本上加一个椭圆吗


谢谢。

首先,让我们找到所有暗像素的x-y坐标

bw = imread('http://i.imgur.com/0LxC6bd.png');
bw = min( bw, [], 3 ) < 50 ; % dark pixels - intensity lower than 50
[y x] = find( bw ); % note that find returns row-col coordinates.

您可以从
C
的特征向量和特征值中获得椭圆的方向:

[V D] = eig( C );
figure; imshow( bw ); hold on;
quiver( mx([1 1]), my([1 1]), (V(1,:)*D), (V(2,:)*D), .05 );  
查看特征向量和特征值:

V =
-0.9979   -0.0643
-0.0643    0.9979

D = 
1.0e+003 *
0.1001         0
     0    1.3652
您可以看到本征向量(V列)大致指向
-X
方向(第一列)和
Y
方向(第二列)。检查本征值(D的对角线)可以看到第二个本征值比第一个本征值大得多-这是椭圆的长轴。现在可以恢复椭圆的方向:

[~, mxi] = max(diag(D)); % find major axis index: largest eigen-value
从相应的特征向量恢复角度

or = atan2( V(2,mxi), V(1,mxi) ) * 180/pi ; % convert to degrees for readability
or =
93.6869
正如你所看到的,椭圆的长轴几乎偏离地平线90度。 可以将图像向后旋转

imrotate( bw, -or );


根据协方差矩阵绘制椭圆:

th = linspace(0, 2*pi, 500 );
xy = [cos(th);sin(th)];
RR = chol( C ); % cholesky decomposition
exy = xy'*RR; %//'
figure;imshow( bw ); hold on;
plot( 2*exy(:,1)+mx, 2*exy(:,2)+my, 'r', 'LineWidth', 2 );
我使用了这个解决方案:

bw = im2;
bw = sum((1-im2).^2, 3) > .5; 
%bw = min( bw, [], 3 ) < 50 ; % dark pixels - intensity lower than 50
[y x] = find( bw ); % note that find returns row-col coordinates.

mx = mean(x);
my = mean(y);
C = [ mean( (x-mx).^2 ),     mean( (x-mx).*(y-my) );...  
      mean( (x-mx).*(y-my) ) mean( (y-my).^2 ) ];
[V D] = eig( C );

quiver( mx([1 1]), my([1 1]), (V(1,:)*D), (V(2,:)*D), .05 );
[~,mxi] = max(diag(D)); % find major axis index: largest eigen-value
or = atan2( V(2,mxi), V(1,mxi) ) * 180/pi ; % convert to degrees for readability
rotate = imrotate( im2, or-180 );

axes(handles.axes2);

imshow( rotate );  
set(handles.text3, 'String',or-180);
bw=im2;
bw=总和((1-im2)。^2,3)>.5;
%bw=最小值(bw,[],3)<50;%暗像素-强度低于50
[y x]=查找(bw);%请注意,find返回行列坐标。
mx=平均值(x);
my=平均值(y);
C=[平均值((x-mx)。^2),平均值((x-mx)。*(y-my));。。。
平均值((x-mx)。*(y-my))平均值((y-my)。^2)];
[vd]=eig(C);
箭袋(mx([11]),my([11]),(V(1,:)*D),(V(2,:)*D),.05);
[~,mxi]=max(diag(D));%查找长轴索引:最大特征值
or=atan2(V(2,mxi),V(1,mxi))*180/pi;%转换为度以提高可读性
旋转=imrotate(im2或-180);
轴(手柄、轴2);
imshow(旋转);
设置(handles.text3,“String”或-180);

我了解其中的大部分内容,但MATLAB中是否有“更安静”的函数,我使用的是MATLAB R2012b,我没有发现任何类似的函数,我得到了类似“quiver”的东西@Ritz我的拼写更正。谢谢。您好,先生,我使用了您的代码并将其组装在一起,但我没有得到所需的输出:@Ritz,通过将所有代码放在一起,而不是将其分为函数/块,您运行了
mx
-x坐标的平均值(在函数
[mx mxi]=max(diag(D))的存储值;
。恢复
mx
的值,你应该会没事的。我现在得到了完美的椭圆,但我仍然没有得到旋转的文本。你能把它们分成模块,分别将.m文件寄给我吗。我的邮件id是firunscall@gmail.comSimilar任务:
bw = im2;
bw = sum((1-im2).^2, 3) > .5; 
%bw = min( bw, [], 3 ) < 50 ; % dark pixels - intensity lower than 50
[y x] = find( bw ); % note that find returns row-col coordinates.

mx = mean(x);
my = mean(y);
C = [ mean( (x-mx).^2 ),     mean( (x-mx).*(y-my) );...  
      mean( (x-mx).*(y-my) ) mean( (y-my).^2 ) ];
[V D] = eig( C );

quiver( mx([1 1]), my([1 1]), (V(1,:)*D), (V(2,:)*D), .05 );
[~,mxi] = max(diag(D)); % find major axis index: largest eigen-value
or = atan2( V(2,mxi), V(1,mxi) ) * 180/pi ; % convert to degrees for readability
rotate = imrotate( im2, or-180 );

axes(handles.axes2);

imshow( rotate );  
set(handles.text3, 'String',or-180);