Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-14, 20:13   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 钻头旋转操作

有没有办法使位旋转操作可逆?我的意思是,如果有图像X(大小256 * 256 * 3),则在进行位旋转时会获得图像Y。然后,对Y进行一点旋转,我们得到图像X。此外,如何解决位溢出问题,从而不会造成信息丢失。



回答:

更新:我已经采用了下面发布的代码,并将其完善为具有错误检查,帮助文档的完整功能 ,并且能够对无符号整数双精度变量的数组进行操作,就像相关的内置函数BITSHIFT一样 。我建议使用上面链接到的新版本,而不要使用下面发布的旧版本。

MATLAB没有内置的位旋转功能,而BITSHIFT函数将丢弃溢出的位。但是,您可以根据现有的位操作实现自己的位旋转功能。这是我放在一起的一个简单的首过版本(没有错误检查):

function data = bit_rotate(data,nBits) dataBits = log2(double(intmax(class(data)))+1); %# Number of bits in data nBits = rem(nBits,dataBits); %# No need to rotate by dataBits bits or more if nBits == 0 %# No bit rotation needed, just return return end shiftedData = bitshift(data,nBits); %# Bit shift the data lostData = bitxor(data,bitshift(shiftedData,-nBits)); %# Find the lost bits rotatedData = bitshift(lostData,nBits-sign(nBits)*dataBits); %# Rotate them data = shiftedData+rotatedData; %# Add the rotated bits to the shifted bits end 这是一些测试数据:

>> B = uint8(208); %# An unsigned 8-bit integer value >> disp(dec2bin(B,8)) %# Display the bit pattern of B 11010000 >> disp(dec2bin(bit_rotate(B,2),8)) %# Rotate left by 2 bits 01000011 >> disp(dec2bin(bit_rotate(B,-2),8)) %# Rotate right by 2 bits 00110100 请注意, bit_rotate还将对data任何大小矩阵输入进行操作,只要它是无符号整数类型即可。



更多&回答...
poster 当前离线   回复时引用此帖
回复

主题工具
显示模式

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 05:16


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.