查看: 210|回复: 2|关注: 0

[已答复] 如何进行垂直角度矫正?

[复制链接]

新手

15 麦片

财富积分


050


5

主题

13

帖子

0

最佳答案
发表于 2020-5-16 15:03:00 | 显示全部楼层 |阅读模式
我通过radon变换对图像进行了水平方向的矫正,但是垂直方向矫正的代码该如何写求帮忙
回复主题 已获打赏: 0 积分

举报

论坛优秀回答者

中级

632 麦片

财富积分


5001500


22

主题

948

帖子

106

最佳答案
  • 关注者: 9
发表于 2020-5-18 20:47:47 | 显示全部楼层
自己尝试一下
其中k1,k2分别是控制水平方向、竖直方向上的扭曲矫正的参数。

本文中预设k1= -0.00000024,k2=0.在程序运行过程中可以根据具体图像的扭曲程度调节参数值。

function niuqujiaozheng_Callback(hObject, eventdata, handles)%扭曲校正
handles.graydpromp=handles.grayd;
axes(handles.axes1);
set(handles.axes1,'HandleVisibility','ON');
axes(handles.axes1);
imshow(uint8(handles.grayd));title('有扭曲畸变的文字图');
guidata(hObject,handles);

prompt={'控制Y轴的参数:K1'};
defans={'-0.00000024'};
p=inputdlg(prompt,'input',1,defans);
p1=str2num(p{1});
k1 =p1;  

axes(handles.axes1);
prompt={'控制X轴的参数:K2'};
defans={'0'};
p=inputdlg(prompt,'input',1,defans);
p1=str2num(p{1});
  k2 =p1
img_origin=handles.graydpromp;

img_size = size( img_origin );  
img_undist = zeros( img_size );  
img_undist = uint8( img_undist );     
for l1 = 1:img_size(1)  
    y = l1 - img_size(1)/2;        
    for l2 = 1:img_size(2)            
        x = l2 - img_size(2)/2;            
        x1 = round( x * ( 1 + k1 * x * x + k2 * y * y ) );  
        y1 = round( y * ( 1 + k1 * x * x + k2 * y * y ) );  
        y1 = y1 + img_size(1)/2;  
        x1 = x1 + img_size(2)/2;            
        img_undist(l1,l2) = img_origin(y1, x1);            
    end  
end  
handles.graydpromp=img_undist;
set(handles.axes2,'HandleVisibility','ON');
axes(handles.axes2);
imshow(uint8(handles.graydpromp));title('校正之后的图像');
guidata(hObject,handles);
回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

中级

632 麦片

财富积分


5001500


22

主题

948

帖子

106

最佳答案
  • 关注者: 9
发表于 2020-5-18 20:49:31 | 显示全部楼层
theta = -90:89;
[R,xp] = radon(binaryImage,theta);
imagesc(theta,xp, R); colormap(jet);
xlabel('theta (degrees)');ylabel('x''');
title('theta方向对e79fa5e98193e58685e5aeb931333335316465应的Radon变换R随着x''的变化图');
colorbar
%%%%%
[R1,r_max] = max(R);
theta_max = 90;
while(theta_max > 50 || theta_max<-50)
[R2,theta_max] = max(R1); % R2: Maximum Radon transform value over all angles.
% theta_max: Corresponding angle
R1(theta_max) = 0; % Remove element 'R2' from vector 'R1', so that other maximum values can be found.
theta_max = theta_max - 91;
end
correctedImage = imrotate(im,-theta_max); % Rotation correction
correctedImage(correctedImage == 0) = 255; % Converts black resgions to white regions
subplot(1,2,1), subimage(im)
subplot(1,2,2), subimage(correctedImage)
回复此楼 已获打赏: 0 积分

举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表