R との簡単な画像比較を行いたかった (Python を使用していない理由は、ワークフローが R にあるためです)。R のパッケージで ms-ssim の実装を検索しようとしましたが、spatialcompare::msssim
. しかし、昨日の投稿matrix
で述べたように、この関数の結果が入力に対して正しくない可能性があることがわかりました (変換に関連している可能性がありraster
ますか?)。適切な ms-ssim コードの提案はありますか? 画像を何度も何度もダウンサンプリングするのは簡単に思えるので、実際にに基づいて自己実装しましSpatialPack::SSIM
たが、正しく書いているかどうかはわかりません。答えとして載せておきます。
1 に答える
0
非常に単純な ms-ssim のデモ コード:
calcMSSSIM<-function(Mat1,Mat2){
weight = c(0.0448, 0.2856, 0.3001, 0.2363, 0.1333)
level<-5
array<-c()
ssim<-SpatialPack::SSIM(Mat1, Mat2, alpha=1, beta=1, gamma=1,
eps=c(0.01,0.03), L=max(tmp1,tmp2))$SSIM
array[1]<-ssim$comps["contrast"]*ssim$comps["structure"]
result<-abs(array[1])^weight[1]
for (i in 2:level) {
tmp1 <- EBImage::resize(tmp1, w=dim(tmp1)[1]/2, filter="none")
tmp2 <- EBImage::resize(tmp2, w=dim(tmp2)[1]/2, filter="none")
ssim <- SpatialPack::SSIM(tmp1,tmp2,alpha=1, beta=1, gamma=1,
eps=c(0.01,0.03), L=max(tmp1,tmp2))$SSIM
array[i]<-ssim$comps["contrast"]*ssim$comps["structure"]
result <- result*abs(array[i])^weight[i]
}
lum<-ssim$comps["luminance"]
result<-result*lum^weight[i]
return(list(array,result))
}
それが正しいか?
于 2021-02-25T09:16:50.543 に答える